算法:
二叉搜索树自带顺序,所以不用强调前、中、后序。
调试过程:
原因:初始化变量result时,没有给result赋值
正确代码:
/*** Definition for a binary tree node.* public 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;* }* }*/
class Solution {public TreeNode searchBST(TreeNode root, int val) {if (root == null || root.val == val) return root;TreeNode result = null;if (val < root.val) result = searchBST(root.left, val);if (val > root.val) result = searchBST(root.right, val);return result;}
}
时间空间复杂度:
时间复杂度
给定解决方案中 `searchBST
` 函数的时间复杂度可以表示为 O(ℎ),其中 ℎ 是二叉搜索树(BST)的高度。在最坏情况下,算法将从根节点遍历到叶子节点,因此时间复杂度为 O(ℎ)。
空间复杂度
提供的解决方案的空间复杂度也是 O(ℎ),其中 ℎ 是二叉搜索树的高度。这个空间复杂度是由递归调用 `searchBST
` 时使用的递归栈引起的。
需要注意的是,在最坏情况下,当树是倾斜的(实际上是一个链表)时,树的高度可能等于树中的节点数,导致时间和空间复杂度为O(n),其中 n 是树中的节点数。