102、二叉树层序遍历登场
测试main():
class TreeNode:
def __init__(self, val=None, left=None, right=None):
self.val = val
self.left = left
self.right = right
class Solution:
"""二叉树层序遍历迭代解法"""
def levelOrder(self, root):
s = Solution()
# 构造一个二叉树,此处省略了构造函数的实现
# tree = TreeNode()
tree = TreeNode(3)
tree.left=TreeNode(9)
tree.right = TreeNode(20)
tree.right.left = TreeNode(15)
tree.right.right = TreeNode(7)
print(s.levelOrder(tree)) # 输出 [1, 2, 3]
1.迭代解法
迭代解法运行代码:
class Solution:
def levelOrder(self, root: Optional[TreeNode]) -> List[List[int]]:
results=[]
if not root:
return results
from collections import deque
que=deque([root])
while que:
result=[]
length=len(que)
for _ in range(length):
cur=que.popleft()
result.append(cur.val)
if cur.left:
# if que.left:
que.append(cur.left)
if cur.right:
que.append(cur.right)
results.append(result)
return results
2、迭代解法
迭代解法运行代码:
迭代法运行代码:
class Solution:
def levelOrder(self, root) :
res = []
def helper(root, depth):
if not root: return []
if len(res) == depth: res.append([]) # start the current depth
res[depth].append(root.val) # fulfil the current depth
if root.left: helper(root.left, depth + 1) # process child nodes for the next depth
ff=depth
if root.right: helper(root.right, depth + 1)
ff2=depth
helper(root, 0)
return res
226.翻转二叉树
测试代码:
class TreeNode:
def __init__(self, val=None, left=None, right=None):
self.val = val
self.left = left
self.right = right
class Solution:
def invertTree(self, root) :
s = Solution()
# 构造一个二叉树,此处省略了构造函数的实现
# tree = TreeNode()
tree = TreeNode(3)
tree.left=TreeNode(9)
tree.left.left=TreeNode(6)
tree.left.left.left=TreeNode(4)
tree.right = TreeNode(20)
tree.right.left = TreeNode(15)
tree.right.right = TreeNode(7)
ddd=s.invertTree(tree)
def ffff(root):
res=[]
def helper(root,depth):
if not root:return []
if len(res)==depth : res.append([])
# res([depth]).append(root.val)
res[depth].append(root.val)
if root.left:helper(root.left,depth+1)#原来根节点为0层,现在慢慢到第一层,第二层.....
if root.right:helper(root.right,depth+1)
helper(root,0)
return res
print(ffff(ddd))
1.递归法代码:
不能用中序遍历。
#前序遍历
class Solution:
def invertTree(self, root: Optional[TreeNode]) -> Optional[TreeNode]:
if root is None:
return None
root.left,root.right=root.right,root.left
self.invertTree(root.left)
self.invertTree(root.right)
return root
#后序遍历
class Solution:
def invertTree(self, root: Optional[TreeNode]) -> Optional[TreeNode]:
if root is None:
return None
self.invertTree(root.left)
self.invertTree(root.right)
root.left,root.right=root.right,root.left
return root
(迭代法消化不了,二刷再做)