剑指Offer五十七: 二叉树的下一个结点

题干

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

     2
   5     6
 1  3   4 7
     9

1的下一个结点就是5,9的下一个结点是2,3的一下个结点是9。

思路

由于我们知道还有指向父节点的指针,可以先进行一个具体的分析。

  1. 对于 没有左右节点,且是父节点的左子树时候,例如1,其下一个结点就是其父节点。
  2. 对于有左右子树或者是有右子树的节点来说,且右子树没有左子树。例如5和3,其下一个节点就是其右子树。
  3. 对于没有左右节点且是父节点的右子树时候,就需要向上查询,查询到某一个节点的父节点的左子树是其自己,如5,这个时候,9的下一个结点就是5的父亲。
  4. 对于有右子树且右子树有左子树时候,就递归到左子树的最下面节点,如2的下一个是4。

代码

public class Solution {
    public TreeLinkNode GetNext(TreeLinkNode pNode)
    {
        
        TreeLinkNode head=pNode;
        if(head==null) return null;
        if(head.right!=null)
        {
            TreeLinkNode p=head.right;
            while(p.left!=null)
                p=p.left;
            return p;
        }
        while(head.next!=null){
            if(head.next.left==head) return head.next;
            head=head.next;
        }
        return null;
        
        }
    }

发布了84 篇原创文章 · 获赞 53 · 访问量 7387

猜你喜欢

转载自blog.csdn.net/weixin_44015043/article/details/105421874