前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >专栏 >leetCode164|递增顺序查找树

leetCode164|递增顺序查找树

作者头像
码农王同学
发布于 2021-01-15 03:04:51
发布于 2021-01-15 03:04:51
34800
代码可运行
举报
文章被收录于专栏:后端Coder后端Coder
运行总次数:0
代码可运行

一,递增顺序查找树

1,问题简述

给你一个树,请你 按中序遍历 重新排列树,使树中最左边的结点现在是树的根,并且每个结点没有左子结点,只有一个右子结点。

2,示例描述

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
示例 :

输入:[5,3,6,2,4,null,8,1,null,null,null,7,9]

       5
      / \
    3    6
   / \    \
  2   4    8
 /        / \ 
1        7   9

输出:[1,null,2,null,3,null,4,null,5,null,6,null,7,null,8,null,9]

 1
  \
   2
    \
     3
      \
       4
        \
         5
          \
           6
            \
             7
              \
               8
                \
                 9  
 

提示:

给定树中的结点数介于 1100 之间。
每个结点都有一个从 01000 范围内的唯一整数值。

 

3,题解思路

使用中序遍历的方式进行查找元素,然后进行数据元素的构建

4,题解程序

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
import java.util.ArrayList;
import java.util.List;

public  class IncreasingBSTTest {
    public static void main(String[] args) {
        TreeNode t1 = new TreeNode(5);
        TreeNode t2 = new TreeNode(3);
        TreeNode t3 = new TreeNode(6);
        TreeNode t4 = new TreeNode(2);
        TreeNode t5 = new TreeNode(4);
        TreeNode t6 = new TreeNode(8);
        TreeNode t7 = new TreeNode(1);
        TreeNode t8 = new TreeNode(7);
        TreeNode t9 = new TreeNode(9);
        t1.left = t2;
        t1.right = t3;
        t2.left = t4;
        t2.right = t5;
        t3.right = t6;
        t4.left = t7;
        t6.left = t8;
        t6.right = t9;
        increasingBST(t1);


    }

    public static TreeNode increasingBST(TreeNode root) {
        List<Integer> list = new ArrayList<>();
        if (root == null) {
            return null;
        }
        dfs(root, list);
        TreeNode dummyNode = new TreeNode(-1);
        TreeNode tempNode = dummyNode;
        for (Integer integer : list) {
            TreeNode temp = new TreeNode(integer);
            tempNode.right = temp;
            tempNode = tempNode.right;
        }
        return dummyNode.right;
    }

    private static void dfs(TreeNode root, List<Integer> list) {
        if (root == null) {
            return;
        }
        if (root.left != null) {
            dfs(root.left, list);
        }
        list.add(root.val);
        if (root.right != null) {
            dfs(root.right, list);
        }
    }
}

5,总结一下

这次使用的是中序遍历得到树元素结点,然后对元素结点进行重新构建

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2021-01-10,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 码农王同学 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
leetcode136|把二叉搜索树转换为累加树
给出二叉 搜索 树的根节点,该树的节点值各不相同,请你将其转换为累加树(Greater Sum Tree),使每个节点 node 的新值等于原树中大于或等于 node.val 的值之和。提醒一下,二叉搜索树满足下列约束条件:节点的左子树仅包含键 小于 节点键的节点。节点的右子树仅包含键 大于 节点键的节点。左右子树也必须是二叉搜索树。
码农王同学
2020/11/26
1920
LeetCode88|两数之和IV-输入BST
给定一个二叉搜索树和一个目标结果,如果 BST 中存在两个元素且它们的和等于给定的目标结果,则返回 true。
码农王同学
2020/10/14
2670
leetCode182|二叉树展开为链表
一,二叉树展开为链表 1,问题简述 给定一个二叉树,原地将它展开为一个单链表。 2,示例简述 例如,给定二叉树 1 / \ 2 5 / \ \ 3 4 6 将其展开为: 1 \ 2 \ 3 \ 4 \ 5 \ 6 3,题解思路 重新构建一下二叉树 4,题解程序 import java.util.LinkedList; import java.util.List
码农王同学
2021/02/02
3300
LeetCode75|二叉搜索树的第k大节点
现在输出的内容都是之前写的,但是没有整理成一篇篇文章,这里就想着慢慢把之前的题都整理成一套,目前在输出几十篇,我也不知道什么时候能输出完成,慢慢输出吧,帮助自己的同时,能帮助到需要的人是再好不过了。
码农王同学
2020/10/14
5350
LeetCode 剑指Offer 面试题27. 二叉树的镜像
输入:root = [4,2,7,1,3,6,9] 输出:[4,7,2,9,6,3,1]
手撕代码八百里
2020/07/28
3040
leetCode168|翻转二叉树
一,翻转二叉树 1,问题简述 翻转一棵二叉树 2,示例描述 示例: 输入: 4 / \ 2 7 / \ / \ 1 3 6 9 输出: 4 / \ 7 2 / \ / \ 9 6 3 1 备注: 这个问题是受到 Max Howell 的 原问题 启发的 : 谷歌:我们90%的工程师使用您编写的软件(Homebrew),但是您却无法在面试时在白板上写出翻转二叉树这道题,这太糟糕了。 3,题解思路 递归思
码农王同学
2021/01/15
3020
验证二叉搜索树
递归 5根节点的左子树4为根节点上的所有节点都要小于5 5根节点的右子树6上的所有节点都要大于5 #include<iostream> using namespace std; struct TreeNode { int val; TreeNode* left; TreeNode* right; TreeNode() : val(0), left(nullptr), right(nullptr) {} TreeNode(int x) : val(x),
大忽悠爱学习
2021/04/01
2720
验证二叉搜索树
LeetCode25|二叉树的镜像
5,总结,对于树结构一般都是都可以转换为递归结构进行解决,这是之前做题感觉到的,有的时候也会按照这些思路进行解决,有的时候自己没有很多文字在这里唠嗑什么,因为一篇原创需要300字,所以为了凑字数,自己就闲扯了很多与题无关的内容,按照我的理解,有的时候作者给的题解思路已经可以帮助你梳理这道题的大概内容,如果再手把手教学,就显得过于多余了,题目简洁,大家都明白就可以了
码农王同学
2020/08/25
2530
LeetCode25|二叉树的镜像
LeetCode121|单值二叉树
对于二叉树而言,一般我们可以通过其特点进行解决,其实二叉树也可以看成类似“链表”的复杂操作,对于我来说,理解数组的结构是很有意义的一点,特别是它的随机访问机制更是用的特别熟练,这也是为什么数组访问快的原因
码农王同学
2020/10/27
2800
【python刷题】二叉树
结果: 先序遍历: [1, 2, 4, 5, 3, 6, 7] 中序遍历: [4, 2, 5, 1, 6, 3, 7] 后序遍历: [4, 5, 2, 6, 7, 3, 1] 层次遍历: [[1], [2, 3], [4, 5, 6, 7]]
西西嘛呦
2021/01/18
3310
LeetCode 剑指 Offer 28. 对称的二叉树
请实现一个函数,用来判断一棵二叉树是不是对称的。如果一棵二叉树和它的镜像一样,那么它是对称的。
手撕代码八百里
2020/07/28
3090
LeetCode42|层数最深叶子节点的和
队列的使用,队列的特点先进先出,理解这个特点就可以了。二叉树的特点其实也是很常用的,业务场景中关于树的操作就是树形结构的返回了,这也是我们在其他网站见到的内容,具有层级关系的展示很符合人的审美
码农王同学
2020/08/25
4500
LeetCode42|层数最深叶子节点的和
LeetCode104|求根到叶子节点数字之和
给定一个二叉树,它的每个结点都存放一个 0-9 的数字,每条从根到叶子节点的路径都代表一个数字。
码农王同学
2020/10/27
3320
LeetCode66|二叉树的最小深度
1,问题简述 给定一个二叉树,找出其最小深度。 最小深度是从根节点到最近叶子节点的最短路径上的节点数量。 说明: 叶子节点是指没有子节点的节点 2,示例 示例: 给定二叉树 [3,9,20,null,null,15,7], 3 / \ 9 20 / \ 15 7 返回它的最小深度 2. 3,题解思路 递归的使用 4,题解程序 public class MinDepthTest { public static void main(String[
码农王同学
2020/09/28
3030
LeetCode66|二叉树的最小深度
LeetCode-面试题54-二叉搜索树的第k大节点
观察可以得知,中序遍历后得到的序列是递增的,求第K个大的节点可以转化为求中序遍历的倒序的第k个节点
benym
2022/07/14
2350
LeetCode124|二叉树的中序遍历
根据二叉树的特点进行来做就可以了,利用递归的方式比使用迭代的方式在时间消耗上快了很多,递归的使用时利用了系统栈的方式去写,迭代的方式是使用自己创建的栈结构进行
码农王同学
2020/10/27
2610
【剑指Offer】54. 二叉查找树的第 K 个结点
题目描述 给定一棵二叉搜索树,请找出其中的第k小的结点。例如, (5,3,7,2,4,6,8) 中,按结点数值大小顺序第三小结点的值为4。
瑞新
2020/12/07
2710
LeetCode47|路径之和
给定一个二叉树和一个目标和,判断该树中是否存在根节点到叶子节点的路径,这条路径上所有节点值相加等于目标和。
码农王同学
2020/09/01
2400
LeetCode47|路径之和
leetCode159|二叉搜索树的第k大节点
这题自己还是想基于二叉树的中序遍历做一下进行分享的,所以这次就直接写了,其本质还是基于数据的索引下标获取指定位置的元素
码农王同学
2021/01/15
3220
LeetCode103|路径总和II
给定一个二叉树和一个目标和,找到所有从根节点到叶子节点路径总和等于给定目标和的路径。
码农王同学
2020/10/27
3170
相关推荐
leetcode136|把二叉搜索树转换为累加树
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档