題目描述
給定一棵二叉樹的其中一個節點,請找出中序遍歷序列的下一個節點。算法
樣例
假定二叉樹是:[2, 1, 3, null, null, null, null], 給出的是值等於2的節點。code
則應返回值等於3的節點。io
解釋:該二叉樹的結構以下,2的後繼節點是3。class
2 / \ 1 3
能夠本身畫一顆樹,而後看當前節點的中序遍歷的下一個節點在哪。
有兩種狀況,一種是節點有右子樹,那麼後繼節點在右子樹的最左葉子節點;另外一種狀況是,沒有右子樹,那後繼節點可能在其祖父節點中,須要知足的狀況是,當前節點的父節點是父節點的父節點的左子樹,若不知足則繼續向上查找。二叉樹
class Solution { public TreeNode inorderSuccessor(TreeNode p) { if(p == null) return null; //1.有右子樹,則是右子樹的最左節點 if(p.right != null) { p = p.right; while(p.left != null) p = p.left; return p; } //2.沒有右子樹,則找到父節點爲其父節點的左子樹 while (p.father != null && p.father.left != p) { p = p.father; } //若是沒右子樹葉沒父節點,應該返回null,此時p.father也知足 return p.father; } }