JAVA算法练习题day36
学习了二叉树递归的写法和相关题目。
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 0leftH = dfs(root.left)if leftH == -1 :return -1#难点在这:应该在获取到rightH时候去计算高度差来判断平衡二叉树rightH = dfs(root.right)if rightH == -1 or abs(rightH-leftH) > 1 :return -1return max(leftH,rightH)+1return 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