669.修剪二叉搜索樹
思路一:根據二叉搜索樹的特性進行中間值與去區間值判斷,有三種情況:1.在區間中,所以左右子樹都可能在區間中; 2.在區間外面的左側,必然只有右子樹可能存在區間中;3.在區間外面的右側,必然只有左子樹可能存在區間中思路二:優化代碼,不考慮在區間中的,直接考慮不在區間中的;1.當處于區間左側,只需從右子節點開始遞歸查找;2.當處于區間右側,只需從左子節點開始遞歸查找。
class Solution {
public:TreeNode* trimBST(TreeNode* root, int low, int high) {//思路:首先考慮當前中間節點有三種情況,在low左邊,在high右邊if(root==nullptr) return nullptr;//中間節點在區間左邊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.將有序數組轉化位二叉搜索樹
思路一:由于要高度平衡,有序數組中,每次都選擇中間值作為中間節點,然后在左右分成兩個區間遞歸去構造二叉搜索樹。
538.把二叉搜索樹轉換為累加樹
思路:根據右中左的遍歷順序,把二叉樹的節點值累加并賦值