二叉樹中序遍歷的下一個節點


題目描述:

  給定一棵二叉樹和其中的一個節點,如何找出中序遍歷序列的下一個節點?樹中的節點除了有兩個分別指向左、右子節點的指針,還有一個指向父節點的指針。

解題思路:

這道題意即:給定一個節點,按照中序遍歷(左根右)的方式求該節點的下一個節點。有三種情況:
1. 給定的節點為空——返回空;
2. 給定的節點有右子樹——沿着該右子樹,返回右子樹的第一個左葉子節點;
3. 給定的節點沒有右子樹——如果位於某個節點的左子樹中,則上溯直至找到該節點;否則就返回空。【因為按照中序遍歷“左中右”的遍歷方式,當該節點沒有右子樹時,要么遍歷完畢,下一個節點為空;要么某個子樹的左子樹遍歷完畢,下一個節點是子樹的根節點】

# -*- coding:utf-8 -*-
# class TreeLinkNode:
#     def __init__(self, x):
#         self.val = x
#         self.left = None
#         self.right = None
#         self.next = None#指向父節點的指針
class Solution:
    def GetNext(self, pNode):
        # write code here
        if not pNode:
            return pNode
        if pNode.right:#如果一個節點存在右子樹,下一個節點為它的右子樹中的最左子節點
            left1 = pNode.right
            while left1.left:
                left1 = left1.left
            return left1
        else:#不存在右子樹
            p = pNode.next#當前節點的父節點
            if not p:#根節點
                return None
            else:
                if p.left == pNode:#下個節點為當前節點的父節點
                    return p
                else:#當前節點沒有右子樹,並且它還是它父節點的右子節點
                    while p and p.right == pNode:
                        pNode = p
                        p = pNode.next
                    return p

 

 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM