zoukankan      html  css  js  c++  java
  • [Leetcode]669 Trim a Binary Search Tree

    Given a binary search tree and the lowest and highest boundaries as L and R, trim the tree so that all its elements lies in [L, R] (R >= L). You might need to change the root of the tree, so the result should return the new root of the trimmed binary search tree.

    Example 1:

    Input: 
        1
       / 
      0   2
    
      L = 1
      R = 2
    
    Output: 
        1
          
           2
    

    Example 2:

    Input: 
        3
       / 
      0   4
       
        2
       /
      1
    
      L = 1
      R = 3
    
    Output: 
          3
         / 
       2   
      /
     1

    思路:考的是二叉树节点的删除,只要满足条件的删除就好了,得注意的是一个节点是有两个孩子还是小于两孩子;
    /**
     * Definition for a binary tree node.
     * public class TreeNode {
     *     int val;
     *     TreeNode left;
     *     TreeNode right;
     *     TreeNode(int x) { val = x; }
     * }
     */
    class Solution{
        public TreeNode trimBST(TreeNode root,int L,int R){
            if (root==null)                                       //如果一开始传进来的是空,则返回空;
                return null;
            root.left = trimBST(root.left,L,R);           //递归的删除,从底层删起
            root.right = trimBST(root.right,L,R);
            if (root.val<L||root.val>R){                          //这里是如何删除满足条件的节点的代码
                if (root.left!=null&&root.right!=null){ 
                    root.val = findMax(root.left).val;            //这是有两个孩子的情况
                    trimBST(root.left,root.val-1,root.val+1);
                }
                else {                                            //只有一个孩子或无孩子
                    if (root.left==null)
                        root = root.right;
                    else if (root.right==null)
                        root = root.left;
                }
            }
            return root;
        }
        public TreeNode findMax(TreeNode root){
            if (root==null)
                return null;
            if (root.right==null)
                return root;
            else 
                return findMax(root.right);
        }
    }
  • 相关阅读:
    购物菜单
    数据库
    增删改查
    页面交互
    计算器
    2020.9.21
    团队-团队编程项目中国象棋-项目总结
    团队-团队编程项目作业名称-最终程序
    课后作业-阅读任务-阅读提问-4
    《20171130-构建之法:现代软件工程-阅读笔记》
  • 原文地址:https://www.cnblogs.com/David-Lin/p/7704985.html
Copyright © 2011-2022 走看看