在二叉树中找到一个节点的后继节点

#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;
}

猜你喜欢

转载自blog.csdn.net/wzc2608/article/details/80873071