在二叉樹中找到一個節點的後繼節點
阿新 • • 發佈:2019-01-22
#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;
}