首先介紹一下什么是二叉搜索樹。
? ? 二叉搜索樹是一個有序樹:
- 若它的左子樹不空,則左子樹上所有結點的值均小于它的根結點的值;
- 若它的右子樹不空,則右子樹上所有結點的值均大于它的根結點的值;
- 它的左、右子樹也分別為二叉搜索樹;
這就決定了,二叉搜索樹,遞歸遍歷和迭代遍歷和普通二叉樹都不一樣。
就本題而言,我們使用遞歸法,遍歷的順序取決于節點的值的大小。而不是傳統的前中后序。
大家可以結合我的代碼以及注釋理解此題。
代碼及注釋如下:/*** Definition for a binary tree node.* struct TreeNode {* int val;* TreeNode *left;* TreeNode *right;* TreeNode() : val(0), left(nullptr), right(nullptr) {}* TreeNode(int x) : val(x), left(nullptr), right(nullptr) {}* TreeNode(int x, TreeNode *left, TreeNode *right) : val(x), left(left), right(right) {}* };*/ class Solution { public:TreeNode* searchBST(TreeNode* root, int val) {//創建一個變量存放遞歸函數的返回值TreeNode* result;//終止條件1:遍歷到空節點if(root == NULL) return NULL;//終止條件2:遍歷到的節點值等與valif(root -> val == val) return root;//如果當前節點值較大,則左遞歸if(root -> val > val){result = searchBST(root -> left,val);}//如果當前節點值較小,則右遞歸if(root -> val < val){result = searchBST(root -> right,val);}return result;} };