leetcode 刷題 (94. 二叉樹的中序遍歷)

注意:是用python寫的。

題目:

給定一個二叉樹,返回它的中序 遍歷。

示例:

輸入: [1,null,2,3]
   1
    \
     2
    /
   3

輸出: [1,3,2]

解法:

一、遞歸法:

# Definition for a binary tree node.
# class TreeNode:
#     def __init__(self, x):
#         self.val = x
#         self.left = None
#         self.right = None

class Solution:
    def __init__(self):
        self.ret=[]
        
    def inorderTraversal(self, root):
        """
        :type root: TreeNode
        :rtype: List[int]
        """
        if root is not None:
            self.inorderTraversal(root.left)
            self.ret.append(root.val)
            self.inorderTraversal(root.right)
        return self.ret

二、非遞歸:

def loopVersion(self, root):    # 非遞歸版本
        ret, stack = [], []
        #如果root不爲空或者堆棧有元素:
        while root or stack:
            #1.root不爲空,root壓入堆棧
            while root:
                stack.append(root)
                #2.root=root.left
                root = root.left
                #3.回到1
            #4.如果堆棧有元素
            if stack:
                #5.彈出元素,加入返回隊列
                root = stack.pop()
                ret.append(root.val)
                #6.root=root.left繼續while循環
                root = root.right
        return ret

二叉樹基礎:

  • 樹的定義:樹(英語:Tree)是一種無向圖(undirected graph),其中任意兩個頂點間存在唯一一條路徑。或者說,只要沒有迴路的連通圖就是樹。
  • 二叉樹(英語:Binary tree)是每個節點最多隻有兩個分支(不存在分支度大於2的節點)的樹結構。通常分支被稱作“左子樹”和“右子樹”。二叉樹的分支具有左右次序,不能顛倒。
  • 完全二叉樹:葉節點只能出現在最下層和次下層,並且最下面一層的結點都集中在該層最左邊的若干位置的二叉樹。
  • 平衡二叉樹:它是一棵空樹或它的左右兩個子樹的高度差的絕對值不超過1,並且左右兩個子樹都是一棵平衡二叉樹。
  • 樹的應用
        快速數據檢索:①STL的紅黑樹;②數據庫的B+樹;
        文檔結構組織:DOM
        人工智能:決策樹
        遊戲:通過構造空間樹實現快速碰撞檢測(https://www.zhihu.com/question/25111128)
        區塊鏈的默克爾樹

常用算法:   

  •  遞歸:樹的深度優先遍歷(以前序遍歷爲例)

    模擬遍歷如下二叉樹:

  • 隊列:樹的廣度優先遍歷(分層遍歷):


To be continue......

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章