
T108将有序数组转换为二叉搜索树题目要求给你一个整数数组 nums 其中元素已经按 升序 排列请你将其转换为一棵 平衡 二叉搜索树。题目理解输入一个升序数组nums输出一棵“高度平衡”的二叉搜素树BST核心思路BST特点左 根 右所以我们必须每次选中间元素当根节点流程1️⃣ 找中点 mid2️⃣ 创建 root nums[mid]3️⃣ 左子树 build(left, mid-1)4️⃣ 右子树 build(mid1, right)代码实现classSolution{publicTreeNodesortedArrayToBST(int[]nums){returnbuild(nums,0,nums.length-1);}privateTreeNodebuild(int[]nums,intleft,intright){// 终止条件if(leftright){returnnull;}// 正确的中点intmidleft(right-left)/2;// 创建节点TreeNoderootnewTreeNode(nums[mid]);// 左子树root.leftbuild(nums,left,mid-1);// 右子树root.rightbuild(nums,mid1,right);returnroot;}}}本题感悟掌握升深度搜素树的概念左根节点右深入递归思想T98验证搜索二叉树题目要求给你一个二叉树的根节点 root 判断其是否是一个有效的二叉搜索树。有效 二叉搜索树定义如下节点的左子树只包含 严格小于 当前节点的数。节点的右子树只包含 严格大于 当前节点的数。所有左子树和右子树自身必须也是二叉搜索树。本质理解BST定义对于每个节点左子树所有节点 当前节点右子树所有节点 当前节点核心思路中序遍历BST 的中序遍历 严格递增序列代码实现/** * 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; * } * } */classSolution{longprevLong.MIN_VALUE;//记录上一个值publicbooleanisValidBST(TreeNoderoot){returninorder(root);}privatebooleaninorder(TreeNodenode){if(nodenull){returntrue;}//递归调用左子树if(!inorder(node.left)){returnfalse;}//中判断if(node.valprev){returnfalse;}prevnode.val;//递归调用右子树returninorder(node.right);}}本题感悟被二叉树递归绕的晕晕的