leetcode:669. 修剪二叉搜尋樹 - 力扣(LeetCode)
class Solution { public TreeNode trimBST(TreeNode root, int low, int high) { //和刪除差不多,怕刪除的節點的左右孩子節點有符合範圍的,所以要每次判斷一下,如果有不符合要求的就直接返回上一個節點。 if( root == null) return root; //刪除節點,判斷該節點右孩子有沒有符合題目範圍的 if( root.val < low){ return trimBST(root.right,low,high); } //刪除節點判斷該節點左孩子有沒有符合題目範圍的 if(root.val > high ){ return trimBST(root.left,low,high); } //遍歷深度 root.left = trimBST(root.left,low,high); root.right = trimBST(root.right,low,high); //有就返回 return root; } }
leetcode:108. 將有序陣列轉換為二叉搜尋樹 - 力扣(LeetCode)
class Solution { public TreeNode sortedArrayToBST(int[] nums) { return gettree(nums,0,nums.length - 1); } public TreeNode gettree(int[] nums,int left,int right){ //判斷越界 if(left > right) return null; int mid = (left + right)/2; //將中間節點作為根節點 TreeNode node = new TreeNode(nums[mid]); //將陣列區分成左右節點。 node.left = gettree(nums,left,mid-1); node.right = gettree(nums,mid+1,right); return node; } }
leetcode:538. 把二叉搜尋樹轉換為累加樹 - 力扣(LeetCode)
class Solution { //初始0 TreeNode pre = new TreeNode(0); public TreeNode convertBST(TreeNode root) { //終止條件 if( root == null) return null; //因為是後續遍歷的倒序,所以是右中左 //右 root.right = convertBST(root.right); //中,將累加的值賦給root pre.val += root.val; root.val = pre.val; //左 root.left = convertBST(root.left); return root; } }