Leetcode 669:
题目的第一想法:
这道题的需要找的是两个节点的最低共同祖先。我的第一想法是先找到一个在range内的数字,但我并不是很确定我第一个找到的数字是否为最低共同祖先。另外一个卡住我的点在于对于两个最低节点,我猜测leetcode是随机分配的。也就是说p可能是更小数字,也可能是更大的数字。所以在检查的时候应该同时检查两个数字来避免nullpointerexception的发生。
class Solution {
public TreeNode lowestCommonAncestor(TreeNode root, TreeNode p, TreeNode q) {
if (root.val > p.val && root.val > q.val) return lowestCommonAncestor(root.left, p, q);
if (root.val < p.val && root.val < q.val) return lowestCommonAncestor(root.right, p, q);
return root;
}
}
看完代码随想录之后的想法:
感觉这道题是否能发现第一个遍历到的数字就是最低共同祖先是一个坎
Leetcode 701:
题目的第一想法:
这道题很简单,因为并不涉及到树的rebalance。所以只要找到最正确的位置加入节点就好。然后节点分为leaf,之包含一个子树的节点。在遍历的过程中还需要想到遍历的方式。到底是遍历一条分叉还是需要遍历全树。
class Solution {
public TreeNode sortedArrayToBST(int[] nums) {
return sortedArrayToBST(nums, 0, nums.length - 1);
}
public TreeNode sortedArrayToBST(int[] nums, int low, int high){
if(low == high) return new TreeNode(nums[low]);
else if(low > high) return null;
int mid = (low + high) / 2;
return new TreeNode(nums[mid], sortedArrayToBST(nums, low, mid - 1), sortedArrayToBST(nums, mid + 1, high));
}
}
看完代码随想录之后的想法:
这道题我感觉写法需要注意的小细节还是有几个的。需要注意自己的逻辑。
Leetcode 538:
题目的第一想法:
这道题的要求是把树的每个节点都变为比当前树存在的所有值大于当前节点本身的树。这道题本身是BST所以是一个天然右中左的顺序。只要按照当前顺序记下当前的数值一直相加就好了。
class Solution {
int sum = 0;
public TreeNode convertBST(TreeNode root) {
if(root == null) return null;
convertBST(root.right);
sum += root.val;
root.val = sum;
convertBST(root.left);
return root;
}
}
看完代码随想录之后的想法:
这道题可以使用pre,也可以直接使用数字记录。本质上的逻辑是一样的。