二叉树 part09
二叉搜索树操作
● 669. 修剪二叉搜索树
● 108.将有序数组转换为二叉搜索树
● 538.把二叉搜索树转换为累加树
修剪二叉搜索树
法1:递归
TreeNode* trimBST(TreeNode* root, int low, int high) {
//递归
if (root == NULL) return root;
if (root->val < low) return trimBST(root->right, low, high);
if (root->val > high) return trimBST(root->left, low, high);
root->left = trimBST(root->left, low, high);
root->right = trimBST(root->right, low, high);
return root;
}
将有序数组转换为二叉搜索树
108.将有序数组转换为二叉搜索树
法1: 递归
TreeNode* travesal(vector<int>& nums,int left_num,int right_num){
int mid = (left_num +right_num)/2;
TreeNode* node = new TreeNode(nums[mid]);
node->left = travesal(nums, left_num, mid - 1);
node->right = travesal(nums, mid + 1, right_num);
return node;
}
TreeNode* sortedArrayToBST(vector<int>& nums) {
TreeNode* root = travesal(nums,0,nums.size() -1);
return root;
}
把二叉搜索树转换为累加树
法1:递归
int pre =0; // 记录前一个节点的数值
void traversal(TreeNode* cur){
if (cur == NULL)return;
traversal(cur->right);
cur->val += pre;
pre = cur->val;
traversal(cur->left);
}
TreeNode* convertBST(TreeNode* root) {
pre = 0;
traversal(root);
return root;
}