学习内容:
110. 平衡二叉树
classSolution:defisBalanced(self,root:Optional[TreeNode])->bool:ifself.gethight(root)!=-1:returnTrueelse:returnFalsedefgethight(self,node):ifnotnode:return0lefthight=self.gethight(node.left)iflefthight==-1:return-1righthight=self.gethight(node.right)ifrighthight==-1:return-1ifabs(lefthight-righthight)>1:return-1else:return1+max(lefthight,righthight)学习心得:主要判断不平衡的条件,后序遍历,左右中。
257. 二叉树的所有路径
classSolution:deftraversal(self,cur,path,result):path.append(cur.val)ifnotcur.leftandnotcur.right:spath="->".join(map(str,path))result.append(spath)returnifcur.left:self.traversal(cur.left,path,result)path.pop()ifcur.right:self.traversal(cur.right,path,result)path.pop()defbinaryTreePaths(self,root:Optional[TreeNode])->List[str]:result=[]path=[]ifnotroot:returnresult self.traversal(root,path,result)returnresult学习心得:注意“->”的定义写法。使用前序遍历,中左右,并且需要path回溯.pop()。
404. 左叶子之和
给定二叉树的根节点 root ,返回所有左叶子之和。
classSolution:defsumOfLeftLeaves(self,root:Optional[TreeNode])->int:ifnotroot:return0ifroot.leftisNoneandroot.rightisNone:return0leftValue=self.sumOfLeftLeaves(root.left)ifroot.leftandnotroot.left.leftandnotroot.left.right:leftValue=root.left.val rightValue=self.sumOfLeftLeaves(root.right)sum_val=leftValue+rightValuereturnsum_val学习心得:注意首先数是否为空 根节点的左右节点是否为空,是的话返回0。 后续遍历,左右中,left 判断当前节点的左节点存在,左节点的左右节点都不存在说明为左叶子,记录他的值,继续right 最后sum为左右之和。
222. 完全二叉树的节点个数
给你一棵 完全二叉树 的根节点 root ,求出该树的节点个数。
完全二叉树 的定义如下:在完全二叉树中,除了最底层节点可能没填满外,其余每层节点数都达到最大值,并且最下面一层的节点都集中在该层最左边的若干位置。若最底层为第 h 层(从第 0 层开始),则该层包含 1~ 2h 个节点。
classSolution:defcountNodes(self,root:Optional[TreeNode])->int:returnself.getnodesnum(root)defgetnodesnum(self,cur):ifcurisNone:return0leftnum=self.getnodesnum(cur.left)rightnum=self.getnodesnum(cur.right)sums=leftnum+rightnum+1returnsums学习心得:得注意后面会自己写输入输出