给定一个二叉树和其中的一个结点,请找出中序遍历顺序的下一个结点并且返回。注意,树中的结点不仅包含左右子结点,同时包含指向父结点的指针。
解法:先判断当前节点是否存在右子树,如果存在右子树,就对右子树一直寻找最左结点,直到找到最左的一个结点。
当不存在右子树,就判断是否存在父亲结点,如果不存在父亲结点,说明该节点位根结点,直接返回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 }
原文:https://www.cnblogs.com/0error0warning/p/13418709.html