給定一棵二叉樹的其中乙個節點,請找出中序遍歷序列的下乙個節點。
注意:
假定二叉樹是:[2, 1, 3, null, null, null, null], 給出的是值等於2的節點。
則應返回值等於3的節點。
解釋:該二叉樹的結構如下,2的後繼節點是3。
2 / \
1 3
若當前節點有右子樹,則右子樹中最左側的節點就是當前節點的後繼;
若當前節點沒有右子樹,則需要沿著父級一直向上找,找到第乙個是其父級左兒子的節點,該節點的父節點就是當前節點的後繼。(可以這麼理解,如果當前節點沒有右子樹,說明以當前節點為根節點的子樹已經遍歷完畢,那麼向上找當前節點的父節點,如果當前節點是父節點的右子樹,說明以父節點為根節點的子樹也已遍歷完畢,以此類推,直到找到節點是其父節點的左孩子的節點,此時找到的節點的父級節點就是我們要找的後繼。)
時間複雜度分析
遍歷的節點數永遠不會大於樹的高度。所以時間複雜度是 o(h)
### python3 **
# definition for a binary tree node.
# class treenode(object):
# def __init__(self, x):
# self.val = x
# self.left = none
# self.right = none
# self.father = none
class solution(object):
def inordersuccessor(self, q):
""":type q: treenode
:rtype: treenode
"""if q:
root = q.right
# 判斷是否有右子樹
if root:
# 如果有,右子樹的最左側
while root and root.left:
root = root.left
return root
else:
# 如果沒有,判斷是否是其父節點的左孩子
while q.father and q != q.father.left:
q = q.father
return q.father
return none
AcWing 19 二叉樹的下乙個節點
題目描述 給定一棵二叉樹的其中乙個節點,請找出中序遍歷序列的下乙個節點。注意 樣例 假定二叉樹是 2,1,3,null,null,null,null 給出的是值等於2的節點。則應返回值等於3的節點。解釋 該二叉樹的結構如下,2的後繼節點是3。2 1 3 分析 中序的後序結點是data structu...
AcWing 19 二叉樹的下乙個節點
給定一棵二叉樹的其中乙個節點,請找出中序遍歷序列的下乙個節點。注意 樣例 假定二叉樹是 2,1,3,null,null,null,null 給出的是值等於2的節點。則應返回值等於3的節點。解釋 該二叉樹的結構如下,2的後繼節點是3。2 1 3先判斷如果當前節點有右孩子,則右子樹中最左側的節點就是當前...
二叉樹 二叉樹的下乙個結點
題目描述 給定一棵二叉樹和乙個結點,要求找到中序遍歷此樹時該結點的下乙個結點。分析 中序遍歷一棵二叉樹時,要根據乙個結點有無右子樹而分開討論。若當前結點有右子樹,則它的下乙個結點就是其右子樹的最左葉子結點 若當前結點沒有右子樹,那麼又分兩種情況 若當前結點是其父節點的左孩子結點,那麼其下乙個結點就是...