题解 | #二叉树的下一个结点#

二叉树的下一个结点

http://www.nowcoder.com/practice/9023a0c988684a53960365b889ceaf5e

难在认清楚 所有出口

梳理所有的出口,并且代码简洁的输出

  • 最难之一的在找出 父亲的左儿子==自己的场景。

code

/*
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) {
        //中序下一个
        //至少3个出口, 首先要构建一个可用的测试用例
        if(pNode == NULL){
            return NULL;
        }
        //参数判定
        
        //002 右子树 左到底
        if(pNode->right){
            pNode = pNode->right;
            while(pNode->left !=NULL){
                pNode = pNode->left;
            }
            return pNode;
        }
        //003 向上找, 爸爸= 爷爷的左儿子 为止
        TreeLinkNode *upNode =NULL;
        while(pNode->next !=NULL){
            upNode = pNode->next;
            //found it ,then return;
            if(upNode->left == pNode){
                return upNode;
            }
            
            //not found, update
            pNode = pNode->next;
        }
        //004 找不到,最
        return NULL;
    }
};

more 混乱的逻辑 体现

不知道如何终结,节点也写比较多;抓住一个 上溯的节点就可以了

        //混乱的逻辑
        TreeLinkNode * baba = NULL ;
        TreeLinkNode * yeye = NULL ;
        if(pNode->next){
            baba = pNode->next;
            if(baba && baba->next){
                yeye = baba->next;
                while(yeye->left !=baba ){
                    baba = baba->next;
                    yeye = baba->next->next; //注意判空
                }

            }

        }
全部评论
更好的代码实践: while的判断就简单点,逻辑就可以理出来, 还是一个情形注意 爷爷的左儿子 = 爸爸(个人仅仅是广义的表达,这个比喻不恰当,不适合只有层高为2的树哈),待优化;
点赞 回复 分享
发布于 2022-02-15 11:46

相关推荐

08-19 18:59
已编辑
绍兴文理学院 Java
一只末影酱:一、1w+qps嘛感觉数据有点太夸张了 二、还有就是99.95%这些,本身大部分学生做的小项目基本是100%,因为量太小了,网络抖动问题也基本模拟不出来,感觉这些不太好写 三、你这些项目,都是一个月就做完了,更抽象了,也就是大概意味着,没有技术调研,没有上线测试,
点赞 评论 收藏
分享
评论
点赞
1
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务