1. 程式人生 > >在二叉樹中找到一個節點的後繼節點

在二叉樹中找到一個節點的後繼節點

#include "Tree.h"
using namespace std;

struct pNode
{
    int value;
    pNode* left;
    pNode* right;
    pNode* parent;
    pNode(int data) : value(data), left(nullptr), right(nullptr), parent(nullptr) {}
};
void pconnectTree(pNode* node, pNode* parent, pNode* left, pNode* right)
{
    node->
parent = parent; node->left = left; node->right = right; } pNode* getLeftMost(pNode* node) { if(node == nullptr) return node; while(node->left != nullptr) node = node->left; return node; } pNode* getNextNode(pNode* node) { if(node == nullptr) return
node; if(node->right) return getLeftMost(node->right); else { pNode* parent = node->parent; while(parent && parent->left != node) { node = parent; parent = node->parent; } return parent; } } int main() { pNode*
pNode0 = new pNode(5); pNode* pNode1 = new pNode(3); pNode* pNode2 = new pNode(7); pNode* pNode3 = new pNode(2); pNode* pNode4 = new pNode(5); pNode* pNode5 = new pNode(6); pNode* pNode6 = new pNode(8); pconnectTree(pNode0, nullptr, pNode1, pNode2); pconnectTree(pNode1, pNode0, pNode3, pNode4); pconnectTree(pNode2, pNode0, pNode5, pNode6); pconnectTree(pNode3, pNode1, nullptr, nullptr); pconnectTree(pNode4, pNode1, nullptr, nullptr); pconnectTree(pNode5, pNode2, nullptr, nullptr); pconnectTree(pNode6, pNode2, nullptr, nullptr); pNode* node = getNextNode(pNode4); cout << node->value << endl; }