- 669.修剪二叉搜索树
-
class Solution { public TreeNode trimBST(TreeNode root, int low, int high) { if (root == null) { return null; } if (root.val high) { return trimBST(root.left, low, high); } // root在[low,high]范围内 root.left = trimBST(root服务器托管网.left, low, high); root.right = trimBST(root.right, low, high); return root; } }
本题的关键是要明白删除节点,不能直接返回null,要考虑如果是小于low的话,要考虑删除节点的右子树,如果大于high的话,要考虑删除节点的左子树。
- 108.将有序数组转换为二叉搜索树
-
class Solution { public TreeNode sortedArrayToBST(int[] nums) { return sortedArrayToBSTHelper(nums,0,nums.length); } public TreeNode sortedArrayToBSTHelper(int[] nums, int begin , int end){ if(begin == end) return null; int middle = (begin+end)/2; TreeNode root = new TreeNode(nums[middle]); root.left = sortedArrayToBSTHelper(nums, begin, middle); root.right = sortedArrayToBSTHelper(nums, middle+1, end); return root; } }
本题相对比较简单,关键是思考清楚begin和end的开闭情况。
-
思路:每次取中间的值作为父节点,然后遍历middle左边的区间和右边的区间。
- 538.把二叉搜索树转换为累加树
-
class Solution { int sum; public TreeNode convertBST(TreeNode root) { sum = 0; convertBST1(root); return root; } // 按右中左顺序遍历,累加即可 public void convertBST1(TreeNode root) { if (root 服务器托管网== null) { return; } convertBST1(root.right); sum += root.val; root.val = sum; convertBST1(root.left); } }
思路:本题的关键是右中左的遍历顺序,用一个指针sum记录前一个节点的值,与当前节点相加。
- 总结篇
服务器托管,北京服务器托管,服务器租用 http://www.fwqtg.net
相关推荐: 【专业技能】程序员的软件工程素养之画好 UML 时序图
目录 前言 一、认识时序图 1.1时序图元素 1.2怎么使用 二、画好时序图 2.1一般步骤 2.2举个例子 2.3推荐工具 三、其它作用 四、文章小结 前言 笔者在本科的时候上过软件工程的专业课,也完成过类似的课堂作业,但是工作以后一直没怎么用上。碰巧前段时…