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 rootque = deque([root])while que:size = len(que)for i in range(size):if i == 0:cur = que.popleft()pre = curelse:cur = que.popleft()pre.next = curpre = pre.nextif cur.left:que.append(cur.left)if cur.right:que.append(cur.right)cur.next = Nonereturn root
(递归)
class Solution:def invertTree(self, root: Optional[TreeNode]) -> Optional[TreeNode]:cur = rootif not cur:return root#前序遍历 中左右#中间的处理逻辑cur.left, cur.right = cur.right, cur.leftself.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 Falseelif leftT == None and rightT != None:return Falseelif leftT == None and rightT == None:return Trueelif leftT.val != rightT.val:return Falsereturn compare(leftT.left, rightT.right) and compare(leftT.right, rightT.left)if not root:return Truereturn compare(root.left, root.right)
需要写一个递归函数对根节点的左右子节点进行判断,首先考虑节点为空的情况,最后考虑节点不为空的情况。如果数值不相等,返回False。最后比较左节点的左子节点 and 右节点的右子节点是否相等