博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
leetcode 669. Trim a Binary Search Tree
阅读量:6794 次
发布时间:2019-06-26

本文共 2662 字,大约阅读时间需要 8 分钟。

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 = 2Output:     1      \       2

Example 2:

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

  解法1:

凡是树的题目无非DFS,BFS,递归或者迭代做,仅此而已。

# Definition for a binary tree node.# class TreeNode(object):#     def __init__(self, x):#         self.val = x#         self.left = None#         self.right = Noneclass Solution(object):    def trimBST(self, root, L, R):        """        :type root: TreeNode        :type L: int        :type R: int        :rtype: TreeNode        """        # use DFS, root first then left and right        # if L <= root.val <= R:         #    new_root with root.val;         #    new_root.left = self.trimBST(root.left, L, root.val)        #    new_root.right = self.trimBST(root.right, root.val, R)        #    return new_root        # elif root.val < L:        #    return self.trimBST(root.right, L, R)        # elif root.val > R:        #    return self.trimBST(root.left, L, R)                if root is None:            return None        if L <= root.val <= R:            new_root = TreeNode(root.val)            new_root.left = self.trimBST(root.left, L, root.val)            new_root.right = self.trimBST(root.right, root.val, R)            return new_root        elif root.val < L:            return self.trimBST(root.right, L, R)        elif root.val > R:            return self.trimBST(root.left, L, R)

迭代解法:

/** * 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 root;        }        while (root.val < L || root.val > R) {            if (root.val < L) {                root = root.right;            }            if (root.val > R) {                root = root.left;            }        }        TreeNode dummy = root;        while (dummy != null) {            while (dummy.left != null && dummy.left.val < L) {                dummy.left = dummy.left.right;            }            dummy = dummy.left;        }        dummy = root;        while (dummy != null) {            while (dummy.right != null && dummy.right.val > R) {                dummy.right = dummy.right.left;            }            dummy = dummy.right;        }        return root;    }}

 

转载地址:http://lfrgo.baihongyu.com/

你可能感兴趣的文章
【有新题】OCP 12c 062出现大量新考题-14
查看>>
xshell设置ssh代理登录
查看>>
中国移动将开展4.9GHz上的5G端到端规模测试:4.9GHz归中国移动吗
查看>>
火!30分钟突破vivo官网销售记录,iQOO成最香骁龙855手机
查看>>
移动智能终端在货物中转过程中的应用
查看>>
xml2
查看>>
数据结构图之四(最短路径--弗洛伊德算法)
查看>>
我的友情链接
查看>>
Python3.5修炼手册13
查看>>
我的友情链接
查看>>
hdfs 添加DataNode
查看>>
linux下安装DB2,然后python连接DB2
查看>>
解决 Eclipse Android studio adb 无法打开的问题
查看>>
我的友情链接
查看>>
MyBatis进行insert操作时不能将数据插入到数据库
查看>>
系统日志里面出现:错误应用程序 mysqld-nt.exe,版本 0.0.0.0
查看>>
move Java to Java 7
查看>>
php5.6版本安装出错 make: *** [ext/fileinfo/libmagic/apprentice.lo] Error 1
查看>>
修改忘记的Windows 2008 R2 sp1域管理员密码
查看>>
Linux shell脚本的字符串截取
查看>>