首页 > 其他 > 详细

[编程题] JZ57 二叉树的下一个节点

时间:2020-07-25 22:11:16      阅读:89      评论:0      收藏:0      [点我收藏+]

[编程题] JZ57 二叉树的下一个节点

题目描述

技术分享图片

参考

参考讲解

思路

主要根据中序遍历二叉树的特点:

  • 如果此节点有右子树,就循环找出该右子树的最深处的左子树。
  • 如果此节点无右子树,则返回的就应该是其父亲节点(这里存在一直往上返回其父节点。)

代码

/*
public class TreeLinkNode {
    int val;
    TreeLinkNode left = null;
    TreeLinkNode right = null;
    TreeLinkNode next = null;

    TreeLinkNode(int val) {
        this.val = val;
    }
}
*/
public class Solution {
    
    /*
    思路:根据二叉树的中序遍历特点:
    1、如果二叉树当前节点有右子树,那么返回的是当前节点的右子树的左子树
    2、如果当前节点无右子树(pNode=pNode.next.left),返回当前节点的父节点
    */
    public TreeLinkNode GetNext(TreeLinkNode pNode)
    {
        if(pNode==null) {return null;}
        //1、如果二叉树当前节点有右子树,那么返回的是当前节点的右子树的左子树
        if(pNode.right!=null){
            pNode = pNode.right;
            while(pNode.left!=null){
                pNode = pNode.left;
            }
            return pNode;
        }
        
        //2、如果当前节点无右子树,返回当前节点的父节点
        while(pNode.next!=null){
            if(pNode.next.left==pNode){  //注意理解
                return pNode.next;
            }
            pNode = pNode.next;
        }
        
        //3 题目中其实最后一个中序遍历的节点是null的
        return null;
    }
}

[编程题] JZ57 二叉树的下一个节点

原文:https://www.cnblogs.com/jiyongjia/p/13377412.html

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