理论基础
文章讲解:代码随想录
递归遍历 (必须掌握)
题目链接/文章讲解/视频讲解:代码随想录
迭代遍历 (基础不好的录友,迭代法可以放过)
题目链接/文章讲解/视频讲解:代码随想录
统一迭代 (基础不好的录友,迭代法可以放过)
题目链接/文章讲解:代码随想录
144. Binary Tree Preorder Traversal
题目链接: LeetCode - The World's Leading Online Programming Learning Platform
解题思路:
递归设置底层return 再按顺序 遍历中左右。
# Definition for a binary tree node.
# class TreeNode(object):
# def __init__(self, val=0, left=None, right=None):
# self.val = val
# self.left = left
# self.right = right
class Solution(object):
def postorderTraversal(self, root):
"""
:type root: TreeNode
:rtype: List[int]
"""
res=[]
def traversal(root):
if root is None:
return
res.append(root.val)
traversal(root.left)
traversal(root.right)
traversal(root)
return res
用栈来模拟顺序,遍历时先弹出中,再弹出左和右
因为栈是先进后出所以在栈中排序时放入右节点 再放入左节点
# Definition for a binary tree node.
# class TreeNode(object):
# def __init__(self, val=0, left=None, right=None):
# self.val = val
# self.left = left
# self.right = right
class Solution(object):
def preorderTraversal(self, root):
"""
:type root: TreeNode
:rtype: List[int]
"""
if root is None:
return
res=[]
stack=[root]
while stack:
node=stack.pop()
res.append(node.val)
if node.right:
stack.append(node.right)
if node.left:
stack.append(node.left)
return res
94. Binary Tree Inorder Traversal
题目链接:LeetCode - The World's Leading Online Programming Learning Platform
解题思路:
递归设置底层return 再按顺序 遍历左中右。
# Definition for a binary tree node.
# class TreeNode(object):
# def __init__(self, val=0, left=None, right=None):
# self.val = val
# self.left = left
# self.right = right
class Solution(object):
def inorderTraversal(self, root):
"""
:type root: TreeNode
:rtype: List[int]
"""
res=[]
def traversal(root):
if root is None:
return
traversal(root.left)
res.append(root.val)
traversal(root.right)
traversal(root)
return res
迭代(还没有完全理解)
# Definition for a binary tree node.
# class TreeNode(object):
# def __init__(self, val=0, left=None, right=None):
# self.val = val
# self.left = left
# self.right = right
class Solution(object):
def inorderTraversal(self, root):
"""
:type root: TreeNode
:rtype: List[int]
"""
if not root:
return
res=[]
stack=[]
cur=root
while cur or stack:
if cur:
stack.append(cur)
cur=cur.left
else:
cur = stack.pop()
res.append(cur.val)
cur = cur.right
return res
145. Binary Tree Postorder Traversal
题目链接:https://leetcode.com/problems/binary-tree-postorder-traversal/description/
解题思路:
递归设置底层return 再按顺序 遍历左右中。
# Definition for a binary tree node.
# class TreeNode(object):
# def __init__(self, val=0, left=None, right=None):
# self.val = val
# self.left = left
# self.right = right
class Solution(object):
def postorderTraversal(self, root):
"""
:type root: TreeNode
:rtype: List[int]
"""
res=[]
def traversal(root):
if root is None:
return
traversal(root.left)
traversal(root.right)
res.append(root.val)
traversal(root)
return res
这里我们搭一下preorder的顺风车,preorder是中左右,倒一下就是右左中 我们需要的顺序是左右中 所以我们只需要将preorder中放入栈的左右顺序倒一下 先放左再放右我们就可以得到中右左 反一下就是我们的postorder了
# Definition for a binary tree node.
# class TreeNode(object):
# def __init__(self, val=0, left=None, right=None):
# self.val = val
# self.left = left
# self.right = right
class Solution(object):
def postorderTraversal(self, root):
"""
:type root: TreeNode
:rtype: List[int]
"""
if root is None:
return
res=[]
stack=[root]
while stack:
node=stack.pop()
res.append(node.val)
if node.left:
stack.append(node.left)
if node.right:
stack.append(node.right)
return res[::-1]