0144. Binary Tree Preorder Traversal - chasel2361/leetcode GitHub Wiki
Given a binary tree, return the preorder traversal of its nodes' values.
Example:
Input: [1,null,2,3]
Output: [1,2,3]
這題的目標是以 Preorder 的順序來尋訪整個二元樹,如果用遞迴法會比較直觀
class Solution:
def __init__(self):
self.traversal = []
def preorderTraversal(self, root: TreeNode) -> List[int]:
if not root: return []
self.traversal.append(root.val)
self.preorderTraversal(root.left)
self.preorderTraversal(root.right)
return self.traversal
迭代法的部分需要使用 stack 的概念來把暫時還沒用到的節點儲存進去,由於 Preorder 是以"根 - 左 - 右"的順序尋訪,因此進入 stack 的順序會是"右 - 左 - 根",每往前一步就將當前節點的值輸出
class Solution:
def preorderTraversal(self, root: TreeNode) -> List[int]:
traversal = []
stack = [root]
if not root: return traversal
while stack:
node = stack.pop()
if node.right:
stack.append(node.right)
if node.left:
stack.append(node.left)
traversal.append(node.val)
return traversal
這兩種寫法的時間與空間複雜度都是 O(N)