110. 平衡二叉树
题目
判断一颗二叉树是否是平和二叉树:一棵高度平衡二叉树定义为:一个二叉树每个节点 的左右两个子树的高度差的绝对值不超过 1 。
我的错误trial
- 我通过写了一个函数(后序遍历递归法)求以一个结点为根的树的高度,然后判断根节点的左子树和右子树的高度差绝对值是否小于1。
- 错误原因:是每一个节点的左右两棵子树的高度差不超过1!!!
solution
学习怎么处理不满足条件的子树:根节点返回高度-1作为标记!!!
class Solution:
def getheight(self,root)->int:
if root==None:return 0
else:
h1=0
h2=0
if root.left: h1=self.getheight(root.left)
if root.right: h2=self.getheight(root.right)
# 因为使用后序遍历,所以底层的结果返回到根节点中
# 如果根节点的左右子树的高度差绝对值大于1,则该子树不是平衡的,根节点的高度为-1
# 否则得到根节点的高度
if h1==-1 or h2==-1 or abs(h1-h2)>1:
# 这里也需要注意,如果一个结点的左右结点任意一个的高度为-1,则该节点的高度也得是-1
h=-1
else:
h=1+max(h1,h2)
return h
def isBalanced(self, root: Optional[TreeNode]) -> bool:
if self.getheight(root)==-1:
return False
else:
return True
257 二叉树的所有路径
这里运用到了输出的回溯,遍历还是正常使用的是后序遍历
重要!!!!!!!!!!!!!!!!!
再次答题!!!!!!!!!!!!!!!
# Definition for a binary tree node.
# class TreeNode:
# def __init__(self, val=0, left=None, right=None):
# self.val = val
# self.left = left
# self.right = right
class Solution:
def traversal(self,root,path,result):
path.append(root.val)
if root.left==None and root.right==None:
temp=[]
for i in path:
temp.append(str(i))
pathstr="->".join(temp)
result.append(pathstr)
return
# 出口
if root.left:
self.traversal(root.left,path,result)
path.pop()#这句话在第17行 是因为只有16行的函数return了才说明有新的路径产生(出现了子结点
if root.right:
self.traversal(root.right,path,result)
path.pop()
def binaryTreePaths(self, root: Optional[TreeNode]) -> List[str]:
path=[]
result=[]
self.traversal(root,path,result)
print(result)
return result
404. 左叶子之和
聪明蛋 自己写的噢!!!
# Definition for a binary tree node.
# class TreeNode:
# def __init__(self, val=0, left=None, right=None):
# self.val = val
# self.left = left
# self.right = right
class Solution:
# 怎么定义一个节点是左叶子节点:叶子->无左右孩子,左->是父节点的左孩子
# 判断是父节点的左孩子用direction 如果是根节点为0,往下遍历左节点-1,右节点+1
def traversal(self,node,direction,result):
if node.left==None and node.right==None and direction==-1:
result.append(node.val)
return #这里不要忘记写return
if node.left:
self.traversal(node.left,-1,result)
if node.right:
self.traversal(node.right,1,result)
def sumOfLeftLeaves(self, root: Optional[TreeNode]) -> int:
result=[]
self.traversal(root,0,result)
print(result)
return sum(result)