学习了二叉树递归的写法和相关题目。


45.二叉树的右视图
先看这道:110.平衡二叉树,easy
# Definition for a binary tree node.
# class TreeNode(object):
# def __init__(self, val=0, left=None, right=None):
# self.val = val
# self.left = left
# self.right = right
class Solution(object):
def isBalanced(self, root):
"""
:type root: Optional[TreeNode]
:rtype: bool
"""
#记录高度并返回,用于“递”的计算。返回的高度是正数。那如果当前节点不是平衡二叉树,返回一个负数作为标记(-1)。
def dfs(root):
if root is None:
return 0
leftH = dfs(root.left)
if leftH == -1 :
return -1
#难点在这:应该在获取到rightH时候去计算高度差来判断平衡二叉树
rightH = dfs(root.right)
if rightH == -1 or abs(rightH-leftH) > 1 :
return -1
return max(leftH,rightH)+1
return dfs(root) != -1
右视图的题解:
# Definition for a binary tree node.
# class TreeNode(object):
# def __init__(self, val=0, left=None, right=None):
# self.val = val
# self.left = left
# self.right = right
class Solution(object):
def rightSideView(self, root):
"""
:type root: Optional[TreeNode]
:rtype: List[int]
"""
#先递归右子树,问题:怎么记录答案,怎么确定当前节点是否要记录到答案中去
#记录当前递归深度,如果当前递归深度与当前答案长度一致,则将当前节点加入到答案中。否则不加入。
ans = []
def dfs(root,height):
if root is None:
return
if height == len(ans):
ans.append(root.val)
dfs(root.right,height+1)
dfs(root.left,height+1)
dfs(root,0)
return ans

467

被折叠的 条评论
为什么被折叠?



