有父节点二叉树找中序遍历后继节点

数据结构精妙至极!
求后继节点:
1)为NULL,返回NULL;
2)节点有右子树,则返回右子树的最左节点;
3)没有右子树则向父节点求
**这时候有两个情况,如果该节点是父节点的左节点,则返回父节点。
否则判断该父节点,若该父节点是其父节点的左节点则返回该父节点,否则再判断它的父节点……这样一直到根节点,如果还没有得到结果,则返回为NULL**

/*
struct TreeLinkNode {
    int val;
    struct TreeLinkNode *left;
    struct TreeLinkNode *right;
    struct TreeLinkNode *parent;
    TreeLinkNode(int x) :val(x), left(NULL), right(NULL), parent(NULL) {

    }
};
*/
class Solution {
public:
    TreeLinkNode* GetNext(TreeLinkNode* pNode)
    {
        if(pNode==NULL)
            return NULL;
        TreeLinkNode *p=pNode->right;
        if(p!=NULL)
        {
            while(p->left!=NULL)
                p=p->left;
            return p;
        }
        else
        {
            while(pNode->parent!=NULL)
            {
                if(pNode->next->left==pNode)
                    return pNode->parent;
                pNode=pNode->parent;
            }

        }
        return NULL;

    }
};

猜你喜欢

转载自blog.csdn.net/kellen_f/article/details/79117418
今日推荐