一、最大二叉树(LeetCode654)
/**
* Definition for a binary tree node.
* public class TreeNode {
* int val;
* TreeNode left;
* TreeNode right;
* TreeNode() {}
* TreeNode(int val) { this.val = val; }
* TreeNode(int val, TreeNode left, TreeNode right) {
* this.val = val;
* this.left = left;
* this.right = right;
* }
* }
*/
class Solution {
public TreeNode constructMaximumBinaryTree(int[] nums) {
return travesal(nums,0,nums.length);
}
TreeNode travesal(int[] nums,int leftindex,int rightindex){
if(rightindex - leftindex < 1){//无元素
return null;
}
if(rightindex - leftindex == 1){//一个元素
return new TreeNode(nums[leftindex]);
}
int index = leftindex;//最大元素所在位置
int maxvalue = nums[index];//最大元素值
for(int i = leftindex + 1;i<rightindex;i++){
if(maxvalue < nums[i]){
maxvalue = nums[i];
index = i;
}
}
TreeNode node = new TreeNode(maxvalue);
// 根据index划分左右子树
node.left = travesal(nums,leftindex,index);
node.right = travesal(nums,index+1,rightindex);
return node;
}
}
二、合并二叉树(LeetCode617)
/**
* Definition for a binary tree node.
* public class TreeNode {
* int val;
* TreeNode left;
* TreeNode right;
* TreeNode() {}
* TreeNode(int val) { this.val = val; }
* TreeNode(int val, TreeNode left, TreeNode right) {
* this.val = val;
* this.left = left;
* this.right = right;
* }
* }
*/
class Solution {
public TreeNode constructMaximumBinaryTree(int[] nums) {
return travesal(nums,0,nums.length);
}
TreeNode travesal(int[] nums,int leftindex,int rightindex){
if(rightindex - leftindex < 1){//无元素
return null;
}
if(rightindex - leftindex == 1){//一个元素
return new TreeNode(nums[leftindex]);
}
int index = leftindex;//最大元素所在位置
int maxvalue = nums[index];//最大元素值
for(int i = leftindex + 1;i<rightindex;i++){
if(maxvalue < nums[i]){
maxvalue = nums[i];
index = i;
}
}
TreeNode node = new TreeNode(maxvalue);
// 根据index划分左右子树
node.left = travesal(nums,leftindex,index);
node.right = travesal(nums,index+1,rightindex);
return node;
}
}
三、二叉搜索树中的搜索 (LeetCode700)
递归
/**
* Definition for a binary tree node.
* public class TreeNode {
* int val;
* TreeNode left;
* TreeNode right;
* TreeNode() {}
* TreeNode(int val) { this.val = val; }
* TreeNode(int val, TreeNode left, TreeNode right) {
* this.val = val;
* this.left = left;
* this.right = right;
* }
* }
*/
class Solution {
public TreeNode searchBST(TreeNode root, int val) {
if(root == null || root.val == val) return root;
TreeNode node = null;
if(val<root.val){
node = searchBST(root.left,val);
}
if(val>root.val){
node = searchBST(root.right,val);
}
return node;
}
}
迭代
/**
* Definition for a binary tree node.
* public class TreeNode {
* int val;
* TreeNode left;
* TreeNode right;
* TreeNode() {}
* TreeNode(int val) { this.val = val; }
* TreeNode(int val, TreeNode left, TreeNode right) {
* this.val = val;
* this.left = left;
* this.right = right;
* }
* }
*/
class Solution {
public TreeNode searchBST(TreeNode root, int val) {
while (root != null)
if (val < root.val) root = root.left;
else if (val > root.val) root = root.right;
else return root;
return null;
}
}
四、验证二叉搜索树(LeetCode98)
/**
* Definition for a binary tree node.
* public class TreeNode {
* int val;
* TreeNode left;
* TreeNode right;
* TreeNode() {}
* TreeNode(int val) { this.val = val; }
* TreeNode(int val, TreeNode left, TreeNode right) {
* this.val = val;
* this.left = left;
* this.right = right;
* }
* }
*/
class Solution {
// 递归
long max = Long.MIN_VALUE;
public boolean isValidBST(TreeNode root) {
if (root == null) {
return true;
}
// 左
boolean left = isValidBST(root.left);
// 中
if (max < root.val) {
max = root.val;
}else{
return false;
}
// 右
boolean right = isValidBST(root.right);
return left && right;
}
}
1031

被折叠的 条评论
为什么被折叠?



