[LeetCode] questions conlusion_InOrder, PreOrder, PostOrder traversal

Pre: node 先,                      Inorder:   node in,           Postorder:   node 最後html

PreOrder Inorder PostOrder
node-> left -> right left -> node ->right left -> right ->node

 

 

 

Recursive methodnode

實際上代碼是同樣, 就是把ans.append(root.val) 放在如上表先, 中, 後就是pre, in, post order了.app

1) PreOrder traversalpost

ans = [] def preOrder(self, root): if not root: return ans.append(root.val) preOrder(root.left) preOrder(root.right) preOrder(root) return ans

 

2) Inorder traversal   Worst S: O(n), average is O(lgn)spa

ans = [] def inOrder(self, root): if not root: return inOrder(root.left) ans.append(root.val) inOrder(root.right) inOrder(root) return ans

 

3) PostOrder traversalcode

ans = [] def postOrder(self, root): if not root: return postOrder(root.left) postOrder(root.right) ans.append(root.val)  postOrder(root) return ans

 

Iterable methodhtm

1) Preorder traversal --- Just use stack.blog

 node-> left -> rightget

def Preorder(self, root): if not root: return [] ans, stack = [], [root] while stack: node = stack.pop() ans.append(node.val) if node.right: stack.append(node.right) if node.left: stack.append(node.left) return ans

 

2) inOrder traversalhash

left -> node ->right

def inOrder(self, root): ans, stack = [], [] while True: while root: stack.append(root) root = root.left if not stack: return ans node = stack.pop() ans.append(node.val) root = node.right

 

seconde inOrder traversal

def inOrder(self, root): ans, stack = [], [] while stack or root: if root: stack.append(root) root = root.left else: node = stack.pop() ans.append(node.val) root = node.right return ans

 

3) PostOrder traversal

left -> right ->node

因爲咱們已經知道如何用preorder, 因此咱們知道用 node-> left -> right, 因此咱們能夠用相似於preorder的作法, 將node-> right -> left 作出來, 最後返回reverse 的ans便可.

def PostOrder(self, root): if not root: return [] stack, ans = [root], [] while stack: node = stack.pop() ans.append(node.val) if node.left: stack.append(node.left) if node.right: stack.append(node.right) return ans[::-1]

 

second PostOrder traversal

利用hash table, 可是咱們直接將這個hash table append進入stack, 跟node造成一個tuple.

def PostOrder(self, root): if not root: return [] stack, ans = [(root, False)], [] while stack: node, visited = stack.pop() if visited: ans.append(node.val) else: stack.append((node, True)) if node.right: stack.append((node.right, False)) if node.left: stack.append((node.left, False)) return ans

 

Questions:

[LeetCode]94, 144, 145 Binary Tree InOrder, PreOrder, PostOrder Traversal_Medium

[LeetCode] 589. N-ary Tree Preorder Traversal_Easy

[LeetCode] 590. N-ary Tree Postorder Traversal_Easy

[LeetCode] 98. Validate Binary Search Tree_Medium

[LeetCode] 230. Kth Smallest Element in a BST_Medium tag: Inorder Traversal

[LeetCode] 285. Inorder Successor in BST_Medium tag: Inorder Traversal

[LeetCode] 105. Construct Binary Tree from Preorder and Inorder Traversal_Medium tag: Tree Traversal

[LeetCode] 106. Construct Binary Tree from Postorder and Inorder Traversal_Medium tag: Tree Traversal

[LeetCode] 255. Verify Preorder Sequence in Binary Search Tree_Medium tag: Preorder Traversal, tree

[LeetCode] 331. Verify Preorder Serialization of a Binary Tree_Medium tag: stack

相關文章
相關標籤/搜索