作为要准备踏入码农行业的人来说,要准备校招,怎么能不去刷刷LeetCode呢?
530.二叉搜索树的最小绝对差
- 题目要求
给定一个所有节点为非负值的二叉搜索树,求树中任意两节点的差的绝对值的最小值。
- 例如
输入:
1
\
3
/
2
输出:
1
解释:
最小绝对差为1,其中 2 和 1 的差的绝对值为 1(或者 2 和 3)。
注意: 树中至少有2个节点。
- 分析
方法:二叉搜索树的中序遍历是递增的,所以我们只要求递增数列的最小绝对差即可
class Solution(object):
def getMinimumDifference(self, root):
self.lists=[]
self.zhongxu(root)
for i in range(len(self.lists)-1):
self.lists[i]=abs(self.lists[i]-self.lists[i+1])
return min(self.lists)
def zhongxu(self,root):
if not root:
return
self.zhongxu(root.left)
self.lists.append(root.val)
self.zhongxu(root.right)
作为要准备踏入码农行业的人来说,要准备校招,怎么能不去刷刷LeetCode呢?
543.二叉树的直径
- 题目要求
给定一棵二叉树,你需要计算它的直径长度。一棵二叉树的直径长度是任意两个结点路径长度中的最大值。这条路径可能穿过根结点。
- 例如
给定二叉树
1
/ \
2 3
/ \
4 5
返回 3, 它的长度是路径 [4,2,1,3] 或者 [5,2,1,3]。
- 分析
方法:通过题目意思发现可以不经过根节点,即在左右子树中也可以是最大直径。
后序遍历,不断判断左右子树的最大路径并合并取最大值即可
class Solution(object):
def diameterOfBinaryTree(self, root):
if not root:
return 0
self.max_d=0
self.houxu(root)
return self.max_d
def houxu(self,root):
if root is None:
return 0
left_length=self.houxu(root.left)
right_length=self.houxu(root.right)
if self.max_d<(right_length+left_length):
self.max_d=left_length+right_length
return max(left_length+1,right_length+1)