dreamweaver中文手机版移动网站如何优化排名
最大二叉树题目如下:
思路:这个跟构造二叉树是差不多的,只不过需要每次递归需要找到数组的最大值,然后根据最大值对数组进行左右分割,遵循左闭右开的准则。
代码如下:
class Solution {public TreeNode constructMaximumBinaryTree(int[] nums) {return constructMaximumBinaryTree1(nums, 0, nums.length);}public TreeNode constructMaximumBinaryTree1(int[] nums, int leftIndex, int rightIndex) {//1.递归终止条件:if((rightIndex - leftIndex) < 1) return null;//2.判断特殊情况,若数组只有一个元素if((rightIndex - leftIndex) == 1){return(new TreeNode(nums[leftIndex]));}//3.找出数组中的最大值及其下标:不用每次又新建数组,直接用索引来分割int maxIndex = leftIndex;int maxValue = nums[maxIndex];for(int i = leftIndex+1 ; i < rightIndex; i++){if(nums[i] > maxValue){maxIndex = i;maxValue = nums[i];}}//4.递归构造中节点、左子树和右子树TreeNode root = new TreeNode(maxValue);//将矩阵不断进行分割root.left = constructMaximumBinaryTree1(nums, leftIndex, maxIndex);root.right = constructMaximumBinaryTree1(nums, maxIndex+1, rightIndex);return root;}
}
合并二叉树题目如下:
这道题的思路较为简单,其实跟操作一棵二叉树是差不多的,无论用哪种遍历都可以,但是需要同时操作两棵树的节点,代码如下:
class Solution {public TreeNode mergeTrees(TreeNode root1, TreeNode root2) {//1.明确终止条件if(root1 == null) return root2;if(root2 == null) return root1;//2.单层递归逻辑root1.val += root2.val;root1.left = mergeTrees(root1.left, root2.left);root1.right = mergeTrees(root1.right, root2.right);return root1;}
}
二叉搜索树中的搜索题目如下:
刚开始还在疑惑怎么返回子树,还说确定了节点之后要不要再遍历它的子树,完全没必要,这是自己没掌握好二叉树的结构。只要匹配到与目标值相等的节点,直接返回即可,因为他返回的是TreeNode结构,又不是数值int。这样代码就会很简单:
class Solution {public TreeNode searchBST(TreeNode root, int val) {if(root == null || root.val == val) return root;TreeNode left = searchBST(root.left,val);if(left != null) return left; return searchBST(root.right,val);}
}