class TreeNode:
def __init__(self, val:int, left=None,right=None):
self.val = val
self.left = left
self.right = right
class Solution:
def inorderTraversal(self, root: Optional[TreeNode]) -> List[int]:
result = []
def traversal(root: Optional[TreeNode]):
if root == None:
return
traversal(root.left)
result.append(root.val)
traversal(root.right)
traversal(root)
return result
递归思路:
注意traversal函数的函数参数:root根节点
注意结束递归条件:当root == None
注意每一次递归的逻辑:根据前中后序遍历,调整result.append(root.val)相对其它两步的位置
class TreeNode:
def __init__(self, val=0, left=None, right=None):
self.val = val
self.left = left
self.right = right
class Solution:
def inorderTraversal(self, root: TreeNode) -> List[int]:
if not root:
return []
result = []
stack = []
cur = root
while cur or stack:
if cur:
stack.append(cur)
cur = cur.left
else:
cur = stack.pop()
result.append(cur.val)
cur = cur.right
return result
迭代思路:
停止迭代条件: 只要cur和stack有一个非空,则继续;
若cur所指内容非空,则将当前顶点(父节点)入栈,且让cur指向左孩子,直到到树的最左低端为止,此时cur为None;
此时弹栈,让cur指向当前最左底部的叶子节点(也是根节点,只不过左右孩子为None), 并返回其值。让cur指向右孩子,重复step 2;
如此直到遍历整棵树
class TreeNode:
def __init__(self, val=0, left=None, right=None):
self.val = val
self.left = left
self.right = right
class Solution:
def preorderTraversal(self, root: TreeNode) -> List[int]:
result = []
stack = []
if root:
stack.append(root)
while stack:
node = stack.pop()
if node != None:
if node.right:
stack.append(node.right)
stack.append(node)
stack.append(None)
if node.left:
stack.append(node.left)
else:
node = stack.pop()
result.append(node.val)
return result
迭代统一代码风格