二叉树的下一个节点

9 篇文章 0 订阅
3 篇文章 0 订阅

二叉树的下一个节点

题目:

给定一棵二叉树和其中的一个节点,如何找出中序遍历序列的下一个节点?树中的节点除了有两个分别指向左右节点的指针,还有一个指向父节点的指针

思路:

针对于中序遍历,具体做法是先遍历左子树,然后再遍历根节点,最后遍历右子树。

我们在判断下一个节点的时候大概是这样一个思路,如果该节点有右子节点的话,进入右子树,然后遍历右子树的最左边的一个节点;

如果给定的节点没有右子树,那么就需要往根节点查找,这个时候需要考虑两种情况,如果给定的结点是一个右节点,这个时候我们所找到的父节点已经被遍历过,因此我们需要继续往上遍历,直到找到一个节点未左子节点,这样的节点的父节点就没有被遍历过,这个时候返回该父节点,就是我们所找的下一个节点。

代码:

 public TreeLinkNode GetNext(TreeLinkNode pNode){
        if(pNode == null)
            return null;
        TreeLinkNode res = null;//定义结果
        //判断条件1,如果有右子节点,直接遍历右子节点的最左的节点
        if(pNode.right != null){
            TreeLinkNode p = pNode.right;
            while(p.left!=null){
                p = p.left;
            }
            res = p;
        }
        //判断条件二,如果没有右子节点
        else if(pNode.next != null){//判断父节点是否为空
            TreeLinkNode p = pNode.next;//找到该点的父节点
            TreeLinkNode currentNode = pNode;
            //情况一,pNode这个节点刚好为一个左子节点
            //情况二,pNode这个节点是一个右子节点,那么向上递归直到找到一个节点为左子节点
            while(p != null && currentNode == p.right){
                 currentNode = p;
                 p = p.next;
              }
            res = p;
        }
        return res;    
    }
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值