什么是二叉搜索樹:右子樹節點 > 根節點 > 左子樹節點,
-
二叉搜索樹中的搜索,返回給定值val所在的樹節點
-
終止條件為傳進來的節點為空、或者節點的值 == val值,返回這個節點;
-
單程遞歸邏輯:定義一個result節點接受結果。如果val < root的值,說明 val 的值 應該在當前root的左子樹中,result = search(root->left, val); 同理,如果 val > right, 那么 遞歸遍歷右子樹。
-
-
Leetcode98:驗證二叉搜索樹 isValidBST( )
??題目描述:
- ??思路:中序遍歷是升序。中序遍歷存數組,判斷數組是遞增的。
-
1、參數值 返回值:題目已給
-
2、遞歸終止條件。if( root == nullptr) return true;
-
單程搜索邏輯:先左、中、右進行中序遍歷數組,然后吧節點值加入到數組中。然后判斷數組是否有序。
-
// 思路2:vector<int> arr;bool isValidBST(TreeNode* root) {if( root == nullptr) return true;isValidBST(root->left); //一直走到左子樹到底arr.push_back(root->val);isValidBST(root->right);//判斷arr是否有序for(int i=0; i<arr.size()-1; i++){if(arr[i] >= arr[i+1]){return false;}}return true;}
-
Leetcode230:二叉搜索樹種的第 K 小的元素
-
題目描述:給定一個BFS的根節點root,一個整數K,找到樹種第K 小的原色
-
思路:中序遍歷BFS是升序,中序遍歷節點并存到數組vec中,然后從數組中找地k個小的元素,即vec[k-1];
-
實現:中序遍歷遞歸三部曲。
-
1、返回值和參數。題目已經給出。
-
2、遞歸終止條件。root為空。
-
3、單層搜索。先左,在中(中的時候處理一下節點進入數組)。3、在遞歸右子樹。
-
-
代碼實現:
-
class Solution { public:vector<int> vec;int kthSmallest(TreeNode* root, int k) {//中序遍歷,存數組inorder(root);return vec[k-1];}void inorder(TreeNode* root){if(root == nullptr) return;inorder(root->left);vec.push_back(root->val);inorder(root->right);return;} };
-