剑指offer:二叉树的下一个结点

来源:互联网 发布:trine3 mac 编辑:程序博客网 时间:2024/04/29 23:33

给定一个二叉树和其中的一个结点,请找出中序遍历顺序的下一个结点并且返回。注意,树中的结点不仅包含左右子结点,同时包含指向父结点的指针。

/*struct TreeLinkNode {    int val;    struct TreeLinkNode *left;    struct TreeLinkNode *right;    struct TreeLinkNode *next;    TreeLinkNode(int x) :val(x), left(NULL), right(NULL), next(NULL) {    }};*/class Solution {public:    TreeLinkNode* GetNext(TreeLinkNode* pNode)    {        if (pNode==NULL) return NULL;        if(pNode->right!=NULL){//当有右子节点的情况,返回右子树最底下的左子节点(实际上对右子树又中序遍历)            pNode=pNode->right;            while(pNode->left!=NULL)                pNode=pNode->left;            return pNode;        }        //当没有右子节点时,(1)根节点,返回NULL;(2)不是根节点        if(pNode->next!=NULL){//当前结点不是根节点,而且没有右子节点(1)当前结点是父节点的右子树,(2)当前结点是父节点的左子树,返回父节点            while(pNode->next!=NULL && pNode->next->left!=pNode)//(1)当前结点是父结点的右子树,则令当前结点为父结点,然后再返回祖父结点                pNode=pNode->next;            return pNode->next;        }        return NULL;};
原创粉丝点击