144. 二叉树前序遍历
递归法
class Solution:
def preorderTraversal(self, root: Optional[TreeNode]) -> List[int]:
result = []
def Traversal(result, cur):
if cur == None:
return
result.append(cur.val)
Traversal(result, cur.left)
Traversal(result, cur.right)
Traversal(result, root)
return result
迭代法:
class Solution:
def preorderTraversal(self, root: Optional[TreeNode]) -> List[int]:
stack = []
result = []
if not root:
return result
stack.append(root)
while(stack):
cur = stack.pop()
result.append(cur.val)
if cur.right:
stack.append(cur.right)
if cur.left:
stack.append(cur.left)
return result
前序就是中左右
中序就是左中右
后续就是左右中
145. 二叉树后序遍历
递归法
class Solution:
def postorderTraversal(self, root: Optional[TreeNode]) -> List[int]:
result = []
def Traversal(result, cur):
if cur == None:
return
Traversal(result, cur.left)
Traversal(result, cur.right)
result.append(cur.val)
Traversal(result, root)
return result
迭代法
class Solution:
def postorderTraversal(self, root: Optional[TreeNode]) -> List[int]:
stack = []
result = []
if not root:
return result
stack.append(root) #栈存放当前遍历的节点
while(stack): #栈不为空
cur = stack.pop() #pop一个栈顶元素,result收集值
result.append(cur.val)
if cur.left: #如果右孩子存在,栈加入右节点
stack.append(cur.left)
if cur.right: #左孩子存在,加入左节点
stack.append(cur.right)
#因为栈后进先出,result实际保存的是中右左,返回的时候倒序就是左右中,即后序遍历
return(result[::-1])
94. 中序遍历
递归法:
class Solution:
def inorderTraversal(self, root: Optional[TreeNode]) -> List[int]:
result = []
def Traversal(result, cur):
if cur == None:
return
Traversal(result, cur.left)
result.append(cur.val)
Traversal(result, cur.right)
Traversal(result, root)
return result
迭代法: