102. 二叉树的层序遍历
二叉树的层序遍历
这个思想很巧妙,其实就是想输入头结点,看有没有子节点,有子节点就继续循环。
def levelOrder(self, root):
results=[]
if not root:#不是直接输出[]
return results
from collections import deque
res=[]
que = deque([root])#只取根节点
size = len(que)
while que:
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)
results.append(res)
return results
可以写以下这几题:
199. 二叉树的右视图
二叉树的右视图
这题还挺有意思,需要好好揣摩。
class Solution:
def rightSideView(self, root: Optional[TreeNode]) -> List[int]:
from collections import deque
if not root:
return []
que = deque([root])
res=[]
while que:
cur = que[-1]
res.append(cur.val)
#size=len(que)
for _ in range(len(que)):
cur=que.popleft()
if cur.left:
que.append(cur.left)
if cur.right:
que.append(cur.right)
return res
101. 对称二叉树
对称二叉树
这个使用递归,调用另一个函数。使用后序遍历因为中间的节点需要最后处理。具体是用那种遍历方式见文章:二叉树总结
class Solution:
def isSymmetric(self, root: Optional[TreeNode]) -> bool:
if not root:
return True
return self.compare(root.left,root.right)
def compare(self,left,right):
if left !=None and right==None: return False
elif left==None and right!=None:return False
elif left==None and right==None :return True
elif left.val!=right.val : return False
outside=self.compare(left.left,right.right)
inside=self.compare(left.right,right.left)
isSame = outside and inside
return isSame