題目描述
給定一個二叉樹和其中的一個結點,請找出中序遍歷順序的下一個結點並且返回。注意,樹中的結點不僅包含左右子結點,同時包含指向父結點的指針。
思路:
- 題目說尋找下一個節點,且是按照中序遍歷的情況下,中序遍歷就是左中右
- 那麼我們就要考慮三種情況,第一種就是傳進節點是空的,直接返回空就好了
- 第二種傳進來的節點有右孩子,按照中序,那麼節點下一個一定是右孩子子樹中最深最左邊的那個節點,如果右孩子沒孩子下一個節點就是右孩子本身
- 第三種就是沒有右孩子了,即都是左孩子的情況,我們要判斷下一個節點的話,就是其父結點,那麼我們可以採用next從父結點循環判斷值相等的時候,返回本身就可以了
/*
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 node)
{
if(node==null) return null;
if(node.right!=null){
node=node.right;
while(node.left!=null){
node=node.left;
}
return node;
}
while(node.next!=null)
{
if(node.next.left==node)return node.next;
node=node.next;
}
return null;
}
}