题目链接: ● 654.最大二叉树
文章讲解:
看完代码随想录之后的想法:
构造二叉树我们需要使用前序遍历,终止条件可以为,我们数组中只有一个数,也就是一个数构造一个二叉树,因此我们把这个数构造成一个节点然后return就可以了;
我们进行左子树遍历时我们要保证至少有一个数,因为我们的终止条件就是只有一个数才可以截至;也就是index > start;
同理右子树也是index < end - 1
class Solution {
TreeNode constuct(int[] nums, int start, int end) {
if(end - start == 1) {
return new TreeNode(nums[start]);
}
int maxValue = 0;
int index = 0;
for(int i = start; i < end; i++) {
if(nums[i] > maxValue) {
maxValue = nums[i];
index = i;
}
}System.out.println(start);
System.out.println(end);
TreeNode node = new TreeNode(maxValue);
if(index > start) {
node.left = constuct(nums, start, index);
}
if(index < end - 1)
{
node.right = constuct(nums, index + 1, end);
System.out.println(start);
System.out.println(end);
}
return node;
}
public TreeNode constructMaximumBinaryTree(int[] nums) {
return constuct(nums, 0, nums.length);
}
}
题目链接: 617.合并二叉树
题目链接/文章讲解代码随想录
看完代码随想录之后的想法:
这道题是同时操作两个二叉树,我们操作二叉树是同步操作的,我们把两个二叉树的头节点求和后分别求左右子树;递归进行同样的操作;
我们的终止条件是一个为空,就可以结束了,return 的是另一个节点;
这道题我们使用前中后序都可以,我使用的是前序;
class Solution {
TreeNode mergerTree(TreeNode root1, TreeNode root2) {
if(root1 == null) return root2;
if(root2 == null) return root1;
TreeNode node = new TreeNode(0);
node.val = root1.val + root2.val;
node.left = mergerTree(root1.left, root2.left);
node.right = mergerTree(root1.right, root2.right);
return node;
}
public TreeNode mergeTrees(TreeNode root1, TreeNode root2) {
return mergerTree(root1, root2);
}
}
class Solution {
public TreeNode searchBST(TreeNode root, int val) {
while(root != null) {
if(root.val == val)
return root;
else if(root.val > val)
root = root.left;
else
root = root.right;
}
return null;
}
}
class Solution {
long maxValue = Long.MIN_VALUE;
boolean isValid(TreeNode root) {
if(root == null)
return true;
boolean left = isValid(root.left);
System.out.println(root.val);
if(root.val > maxValue) {
maxValue = (long)root.val;
}else return false;
boolean right = isValid(root.right);
return left && right;
}
public boolean isValidBST(TreeNode root) {
return isValid(root);
}
}