002 前、中、後序遍歷二叉樹(遞迴&非遞迴演算法)
阿新 • • 發佈:2019-02-19
class TreeNode:
self.val = x
self.left = None
self.right = None
遞迴演算法:
- 前序遍歷二叉樹
class Solution:
def preOrderTraverse(self, pRoot):
if not pRoot:
return
print(pRoot.val)
self.preOrderTraverse(root.left)
self.preOrderTraverse(root.right)
- 中序遍歷二叉樹
class Solution:
def inOrderTraverse(self, pRoot):
if not pRoot:
return
self.preOrderTraverse(root.left)
print(pRoot.val)
self.preOrderTraverse(root.right)
- 後序遍歷二叉樹
class Solution: def postOrderTraverse(self, pRoot): if not pRoot: return self.preOrderTraverse(root.left) self.preOrderTraverse(root.right) print(pRoot.val)
非遞迴演算法:
- 前序遍歷二叉樹
class Solution: def preOrderTraverse(self, pRoot): if not pRoot: return node = pRoot stack = [] while node or stack: while node: print(node.val) stack.append(node) node = node.left node = stack.pop() node = node.right
- 中序遍歷二叉樹
class Solution:
def preOrderTraverse(self, pRoot):
if not pRoot:
return
node = pRoot
stack = []
while node or stack:
while node:
stack.append(node)
node = node.left
node = stack.pop()
print(node.val)
node = node.right
- 後序遍歷二叉樹
class Solution:
def preOrderTraverse(self, pRoot):
if not pRoot:
return
node = pRoot
stack = []
res = []
while node or stack:
while node:
res.append(node.val)
stack.append(node)
node = node.right
node = stack.pop()
node = node.left
return res[::-1]