今天的题目总体来说比较简单
654题:最大二叉树通过上次那个用两个递归的数组构造二叉树,今天这个题做的很容易,用先序遍历然后注意两个边界很容易做出了了
代码如下:
public TreeNode constructMaximumBinaryTree(int[] nums) {
int a = nums.length;
return findNode(nums,0,a);
}
public TreeNode findNode(int[] nums,int begin,int end){
int index = begin;
for(int i=begin;i<end;i++){
if(nums[i]>nums[index]){index=i;}
}
TreeNode node = new TreeNode(nums[index]);
int leftbegin = begin;
int leftend = index ;
int rightbegin = index + 1;
int rightend = end;
if(leftend>leftbegin){
node.left = findNode(nums,leftbegin,leftend);
}
if(rightend>rightbegin){
node.right = findNode(nums,rightbegin,rightend);
}
return node;
}617题:合并二叉树
以一个二叉树为基础合并另一个二叉树,当同时有某个节点时返回合并值后的第一个树的节点,当只有一个树有这个节点时返回此节点,两个树同时向下遍历
代码如下:
public TreeNode mergeTrees(TreeNode root1, TreeNode root2) {
if(root1==null){return root2;}
if(root2==null){return root1;}
root1.val+=root2.val;
root1.left = mergeTrees(root1.left,root2.left);
root1.right = mergeTrees(root1.right,root2.right);
return root1;
}700:二叉搜索树中的搜索
层序遍历的easy题;
代码如下:
public TreeNode searchBST(TreeNode root, int val) {
if(root==null){return null;}
Queue<TreeNode> que = new ArrayDeque();
que.add(root);
while(!que.isEmpty()){
TreeNode a = que.poll();
if(a.val==val){return a;}
if(a.left!=null){que.add(a.left);}
if(a.right!=null){que.add(a.right);}
}
return null;
}98题:验证二叉搜索树
这里有一个技巧,也就是二叉搜索树的中序遍历是递增的,按照这个规律,层序遍历即可代码如下:
public boolean isValidBST(TreeNode root) {
if (root == null) {
return true;
}
Stack<TreeNode> stack = new Stack<>();
TreeNode pre = null;
while (root != null || !stack.isEmpty()) {
while (root != null) {
stack.push(root);
root = root.left;// 左
}
// 中,处理
TreeNode pop = stack.pop();
if (pre != null && pop.val <= pre.val) {
return false;
}
pre = pop;
root = pop.right;// 右
}
return true;
}版权声明:本文为qq_44051051原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。