题目描述:
给定一个二叉树和其中的一个结点,请找出中序遍历顺序的下一个结点并且返回。注意,树中的结点不仅包含左右子结点,同时包含指向父结点的指针。
思路:
前序二叉树下一个结点分为以下几种情况:
1、该结点有右子树
下个结点就是右子树最左边的点
2、该结点无右子树
①该结点为左叶子结点,下一个结点为该节点的父节点,即为pNode.next.
②该结点为右叶子节点,下一个结点为其父节点的父节点。。。。直到找到某个结点为其父节点的左子节点,该节点的父节点即为下一个节点
3、一种情况是该节点为前序遍历的最后一个结点,返回null
/* public class TreeLinkNode { int val; TreeLinkNode left = null; TreeLinkNode right = null; TreeLinkNode next = null; 指向父结点的指针 TreeLinkNode(int val) { this.val = val; } } */ public class Solution { public TreeLinkNode GetNext(TreeLinkNode pNode) { if(pNode==null) return null; if(pNode.right!=null){ pNode=pNode.right; while(pNode.left!=null){ pNode=pNode.left; }return pNode; } while(pNode.next!=null){ TreeLinkNode proof=pNode.next; if(proof.left==pNode){ return proof; } pNode=pNode.next; } return null; } }