AcWing 19 二叉樹的下乙個節點

2021-09-13 14:50:31 字數 1264 閱讀 8262

給定一棵二叉樹的其中乙個節點,請找出中序遍歷序列的下乙個節點。

注意:

假定二叉樹是:[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先判斷如果當前節點有右孩子,則右子樹中最左側的節點就是當前...

二叉樹 二叉樹的下乙個結點

題目描述 給定一棵二叉樹和乙個結點,要求找到中序遍歷此樹時該結點的下乙個結點。分析 中序遍歷一棵二叉樹時,要根據乙個結點有無右子樹而分開討論。若當前結點有右子樹,則它的下乙個結點就是其右子樹的最左葉子結點 若當前結點沒有右子樹,那麼又分兩種情況 若當前結點是其父節點的左孩子結點,那麼其下乙個結點就是...