二叉树的下一个结点

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

解法:先判断当前节点是否存在右子树,如果存在右子树,就对右子树一直寻找最左结点,直到找到最左的一个结点。

      当不存在右子树,就判断是否存在父亲结点,如果不存在父亲结点,说明该节点位根结点,直接返回null,如果存在父亲结点,再判断该结点是否为父亲结点的左结点

      如果是左结点,直接返回父亲结点,如果不是左结点,就需要一直往上找父结点

 1 public TreeLinkNode GetNext(TreeLinkNode pNode) {
 2         //该结点还有右子树
 3         if (pNode.right != null) {
 4             pNode = pNode.right;
 5             while (pNode.left != null) {
 6                 pNode = pNode.left;
 7             }
 8             return pNode;
 9         }
10         while (pNode.next != null) {
11             if (pNode == pNode.next.left) {
12                 return pNode.next;
13             }
14             pNode = pNode.next;
15         }
16         return null;
17     }

 

posted @ 2020-08-02 14:30  王余阳  阅读(128)  评论(0)    收藏  举报