102. 二叉树的层序遍历
- class Solution:
- def levelOrder(self, root: Optional[TreeNode]) -> List[List[int]]:
- if not root:
- return []
- result = []
- #用队列
- que = deque([root])
- while que:
- size = len(que)
- res = []
- for _ in range(size):
- cur = que.popleft()
- res.append(cur.val)
- if cur.left:
- que.append(cur.left)
- if cur.right:
- que.append(cur.right)
- result.append(res)
- return result
- class Solution:
- def connect(self, root: 'Node') -> 'Node':
- if not root:
- return root
- que = deque([root])
- while que:
- size = len(que)
- for i in range(size):
- if i == 0:
- cur = que.popleft()
- pre = cur
- else:
- cur = que.popleft()
- pre.next = cur
- pre = pre.next
- if cur.left:
- que.append(cur.left)
- if cur.right:
- que.append(cur.right)
- cur.next = None
- return root
- class Solution:
- def invertTree(self, root: Optional[TreeNode]) -> Optional[TreeNode]:
-
- cur = root
- if not cur:
- return root
- #前序遍历 中左右
- #中间的处理逻辑
- cur.left, cur.right = cur.right, cur.left
- self.invertTree(cur.left)
- self.invertTree(cur.right)
-
- return root
- class Solution:
- def isSymmetric(self, root: Optional[TreeNode]) -> bool:
-
- def compare(leftT: Optional[TreeNode], rightT: Optional[TreeNode]) -> bool:
- #首先把节点为空的情况考虑一下
- if leftT != None and rightT == None:
- return False
- elif leftT == None and rightT != None:
- return False
- elif leftT == None and rightT == None:
- return True
- elif leftT.val != rightT.val:
- return False
- return compare(leftT.left, rightT.right) and compare(leftT.right, rightT.left)
-
-
- if not root:
- return True
- return compare(root.left, root.right)
需要写一个递归函数对根节点的左右子节点进行判断,首先考虑节点为空的情况,最后考虑节点不为空的情况。如果数值不相等,返回False。最后比较左节点的左子节点 and 右节点的右子节点是否相等