二叉树的下一个节点
题目描述
给定一个二叉树和其中的一个结点,请找出中序遍历顺序的下一个结点并且返回。注意,树中的结点不仅包含左右子结点,同时包含指向父结点的指针。
思路:此题包含三步:
1. 如果此节点有右子树,下一个节点为右子节点的最左边的节点。
2.如果此节点没有右子树,并且如果此节点是其父节点的左子节点,则下一个节点为父节点。
3.如果此节点没有右子树,并且如果此节点是其父节点的右子节点,则一直向上找,直到找到第一个是其父节点左节点的节点,下一个节点就为此节点。
public TreeLinkNode GetNext(TreeLinkNode pNode) { if(pNode == null) return null; TreeLinkNode pNext = null; if(pNode.right!=null){ TreeLinkNode temp = pNode.right; while(temp.left!=null){ temp = temp.left; } pNext = temp; }else{ TreeLinkNode pParent = pNode.next; TreeLinkNode current = pNode; while(pParent!=null && pNode == pParent.right){ pNode = pParent; pParent = pParent.next; } pNext = pParent; } return pNext; }