108.将有序数组转换为二叉搜索树
/**
* day23_108_将有序数组转化为二叉数
*/
public class day23_108_将有序数组转化为二叉数 {
public static 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;
}
}
public TreeNode sortedArrayToBST(int[] nums) {
return digui(nums, 0, nums.length-1);
}
TreeNode digui(int[] nums,int left,int right){
//这里写递归逻辑
//这里的ieft和right是洗标
if (left>right) {
return null;
}
if (left==right) {
return new TreeNode(nums[left]);
}
//剩下的就是正常的算中间的了
int mid=(left+right)/2;
//这里把中间值算出来了
TreeNode res= new TreeNode(nums[mid]);
res.left=digui(nums, left, mid-1);
res.right=digui(nums, mid+1, right);
return res;
}
}
这题是递归其实和构造二叉数有些类似的是
前序遍历,先处理根节点,然后处理左右节点,然后将根节点返回,自己对于递归的return有些薄弱,可以好好理一理
这题的思路就是简单的去二分数组然后递归构造就行了
538.把二叉搜索树转换为累加树
public class day23_538_把二叉数的搜索树转化为累计树 {
public static void main(String[] args) {
}
public static 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;
}
}
public TreeNode convertBST(TreeNode root) {
digui(root);
return root;
}
//这题是右中左的遍历
int demosum=0;
void digui(TreeNode root){
if (root==null) {
return;
}
digui(root.right);
demosum+=root.val;
root.val=demosum;
digui(root.left);
}
}
这题很简单,用后中左的遍历顺序就行了