首页 > 其他 > 详细

【剑指offer57 二叉树的下一个节点】

时间:2020-06-15 23:02:10      阅读:57      评论:0      收藏:0      [点我收藏+]

题目描述

给定一个二叉树和其中的一个结点,请找出中序遍历顺序的下一个结点并且返回。注意,树中的结点不仅包含左右子结点,同时包含指向父结点的指针。
 
 
如果当前节点有右子树,那么就是往右再一直往左就找到了
如果当前节点右子树为空,那么往上找父节点,一直找到当前节点为父节点的左子树为止
另一种情况就是当前节点就是中序遍历的最后一个节点了,那么往上找到根节点就会返回null
/*
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)return NULL;
        TreeLinkNode *ans = new TreeLinkNode(0);
        if(pNode->right){
            ans = pNode->right ;
            while(ans && ans->left)ans=ans->left;
            return ans;
        }
        //没有右子树
        if(!pNode->right && pNode->next){
            TreeLinkNode *parrent = pNode->next;
            TreeLinkNode *cur = pNode;
            while(parrent && cur == parrent->right ){//
                cur = parrent; parrent = cur->next;
            }
            //如果是空了退出 结果就为空
            //如果是cur == parrrent->left  那就是parrent
            ans = parrent ;
            return ans ;
        }
    }
};

 

【剑指offer57 二叉树的下一个节点】

原文:https://www.cnblogs.com/Stephen-Jixing/p/13137716.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!