1. 程式人生 > 其它 >樹遍歷相關:二叉樹的遍歷、N叉樹的遍歷、N叉樹的層序遍歷

樹遍歷相關:二叉樹的遍歷、N叉樹的遍歷、N叉樹的層序遍歷

技術標籤:LeetCode刷題leetcode

文章目錄

一、二叉樹的中序遍歷

題目:給定一個二叉樹的根節點 root ,返回它的 中序 遍歷。

示例 1:
在這裡插入圖片描述

輸入:root = [1,null,2,3]
輸出:[1,3,2]

1、遞迴法(推薦)

很簡單,就不說後序和前序了!

# 中序遍歷為例
class Solution:
    def inorderTraversal
(self, root: TreeNode) -> List[int]: # 法1: 遞迴 res = [] self.inorder(root, res) return res def inorder(self, root, res): if root: self.inorder(root.left, res) res.append(root.val) self.inorder(root.right, res) return
res

2、迭代法(瞭解)—中序遍歷

# 中序遍歷
class Solution:
    def inorderTraversal(self, root: TreeNode) -> List[int]:
        # 法2: 迭代-->棧
        res, stack = [], []
        while stack or root:
            if root:
                stack.append(root)
                root = root.left
            else:
                temp =
stack.pop() res.append(temp.val) root = node.right return res

3、迭代法(瞭解)—前序遍歷

# 後序遍歷
class Solution:
    def preorderTraversal(self, root: TreeNode) -> List[int]:
    	res, stack = [], []
        while stack or root:
            if root:
                stack.append(root)
                res.append(root.val)
                root = root.left
            else:
                temp = stack.pop()
                root = temp.right
        return res

4、迭代法(瞭解)—後序遍歷

# 後序遍歷
class Solution:
    def postorderTraversal(self, root: TreeNode) -> List[int]:
    	# 用前序遍歷的思想做後序遍歷
        res, stack = [], []
        while stack or root:
            if root:
                res.append(root.val)
                stack.append(root)
                root = root.right
            else:
                temp = stack.pop()
                root = temp.left
        # 上面是根、右、左遍歷。res翻轉就得到了左右根
        return res[::-1]

二、N叉樹的遍歷

N叉樹只有前序、後序遍歷!無中序遍歷
前序遍歷:根的值在其他所有子節點之前輸出
後序遍歷:根的值在其他所有子節點之後輸出

1、遞迴法(推薦)

class Solution(object):
    def preorder(self, root):
        res =[]
        self.dfs(root, res)
        return res
    
    def dfs(self, root, res):
        if root:
            res.append(root.val) # 後序遍歷就是把這句放到最後
            for child in root.children:
                self.dfs(child, res)
        return res

2、迭代法(瞭解)

# 前序遍歷
class Solution(object):
    def preorder(self, root):
        if not root: return []
        stack, res = [root], []
        while stack:
            temp = stack.pop()
            res.append(temp.val)
            stack.extend(temp.children[::-1])
        return res
# 後序遍歷 --- 其實還是借用的前序遍歷的思想
class Solution(object):
	def postorder(self, root):
        if not root: return []
        stack, res = [root], []
        while stack:
            temp = stack.pop()
            res.append(temp.val)
            stack.extend(temp.children)
        return res[::-1]

三、N叉樹的層序遍歷