题目描述
给定一个二叉树和其中的一个结点,请找出中序遍历顺序的下一个结点并且返回。注意,树中的结点不仅包含左右子结点,同时包含指向父结点的指针。
根据中序遍历的特点:
(1)如果当前节点有右孩子,那么中序遍历的时候,下一个节点就是右孩子的左节点方向一直到叶子节点的左孩子
(2)当没有右孩子,寻找父节点,找到一个父节点指向的左孩子就是当前节点,返回这个父节点:
- 如果这个节点是父节点的左孩子,返回的就是父节点
- 如果这个节点是父节点的右孩子:在根节点的左子树这边,就是找到父节点的父节点,如果在根节点的右子树这边那么显然沿着父节点上去找不到这样的节点,返回空
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){
if(pNode.next.left==pNode)return pNode.next;
pNode=pNode.next;
}
return null;
}
}