首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >二叉排序树的建立和遍历(java)

二叉排序树的建立和遍历(java)

作者头像
GavinZhou
发布于 2018-01-02 08:33:18
发布于 2018-01-02 08:33:18
1.7K00
代码可运行
举报
运行总次数:0
代码可运行

也是个经典的面试题,要求建立二叉排序树同时实现树的遍历,其实不难,直接上代码吧

树节点定义:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
class TreeNode{
    int val;
    TreeNode left;
    TreeNode right;

    TreeNode(){

    }

    TreeNode(int value){
        this.val = value;
        this.left = null;
        this.right = null;
    }

    TreeNode(int value, TreeNode left, TreeNode right){
        this.val = value;
        this.left = left;
        this.right = right;
    }
}

建立二叉排序树

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
public static TreeNode buildBST(int[] data){
        //建立二叉排序树
        //假设data中的数字是互不相同的
        TreeNode root = new TreeNode(data[0]);
        for(int i = 1; i < data.length; i++){
            insert(root, data[i]);
        }

        return root;
    }

    private static TreeNode insert(TreeNode root, int value) {
        //二叉排序树插入节点
        if(root == null){
            root = new TreeNode(value);
        }else{
            if(value <= root.val){
                //插入到左子树
                root.left = insert(root.left, value);
            }else{
                //插入到右子树
                root.right = insert(root.right, value);
            }
        }

        return root;
    }

遍历验证下: 更多的树的遍历方法,参考二叉树的多种遍历方法

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
public static void preOrder(TreeNode root){
        if(root == null){
            return;
        }
        System.out.print(root.val + " ");
        if(root.left != null){
            preOrder(root.left);
        }
        if(root.right != null){
            preOrder(root.right);
        }
    }

main函数:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
public static void main(String[] args) {
        int[] data = {3,1,2,5,0,7,9,8};
        TreeNode root = Main.buildBST(data);
        Main.preOrder(root);
    }

当然这样生成的二叉树不是高度最小的二叉树,不过对于面试到这基本也就可以了

这篇博客说了如何建立高度最小的二叉排序树,大家参考下

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2017-04-17 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

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

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

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
二叉排序树:数据存储的艺术
👋 你好,我是 Lorin 洛林,一位 Java 后端技术开发者!座右铭:Technology has the power to make the world a better place.
Lorin 洛林
2023/11/13
2850
二叉排序树:数据存储的艺术
JavaScript算法题总结 (三)二叉树
BM23 二叉树的前序遍历 /* * function TreeNode(x) { * this.val = x; * this.left = null; * this.right = null; * } */ /** * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可 * * * @param root TreeNode类 * @return int整型一维数组 */ function preorderTraversal( root )
henu_Newxc03
2022/05/12
2630
JavaScript算法题总结 (三)二叉树
二叉排序树
数组和链表在增删改查数据时,都有各自的缺点,比如数组要在中间插入数据,就要让后面的数据整体都移动,而链表检索数据很慢。之前说二叉树时,说到树这种结构就是就是为了弥补数组和链表的缺点而诞生的,二叉排序树(Binary search tree,简称BST),更是体现了这一点。二叉排序树有以下特点:
贪挽懒月
2022/05/13
2980
二叉排序树
《Java初阶数据结构》----5.<二叉树的概念及使用>
树是一种非线性的数据结构,它是由n(n>=0)个有限结点组成一个具有层次关系的集合。把它叫做树是因为它看起来像一棵倒挂的树。它是根朝上,而叶朝下的。
用户11288958
2024/09/24
1540
《Java初阶数据结构》----5.<二叉树的概念及使用>
《剑指 Offer(第 2 版)》树部分JavaScript题解
《剑指 Offer(第 2 版)》通行全球的程序员经典面试秘籍。剖析典型的编程面试题,系统整理基础知识、代码质量、解题思路、优化效率和综合能力这 5 个面试要点。
用户8921923
2022/10/24
4370
《剑指 Offer(第 2 版)》树部分JavaScript题解
二叉树的建立和各种遍历(java版)
这是个常见的面试题,比如说通过二叉树的先序和中序遍历,得到二叉树的层序遍历等问题 先序+中序 ->建树 假设现在有个二叉树,如下: 此时遍历顺序是: PreOrder: GDA
GavinZhou
2018/01/02
1K0
二叉树的建立和各种遍历(java版)
Js算法与数据结构拾萃(4):二叉树
因此只要答对这道题,你就可以超越世界级大牛,问鼎码林之巅(逃) 导读: •二叉树知识重点•二叉树深度不一,因此天生适用递归,因此可用递归处理•判断两树相等•翻转二叉树•二叉树三种深度遍历(迭代)•前序遍历•中序遍历•后序遍历•二叉树的一些迭代特性•判断是否二叉搜索树•二叉搜索树的最近公共祖先•二叉树的最近公共祖先
一粒小麦
2020/02/25
6780
二叉排序树(BST)
Node[val=0] Node[val=1] Node[val=3] Node[val=5] Node[val=7] Node[val=9] Node[val=10] Node[val=12]
用户11097514
2024/05/30
1170
二叉排序(查找)树(Java实现)
二叉排序树:BST(Binary Sort(Search)Tree),又称为二叉查找树。其定义为:二叉排序树或者是一棵空树,或者是具有如下性质的二叉树。 ① 若它的左子树非空,则左子树上所有节点的值均小于根节点的值, ② 若它的右子树非空,则右子树上的所有节点的值均大于(或大于等于)根节点的值。 ③ 它的左右子树也分别为二叉排序树。 简单来说,对于二叉排序树的任何一个非叶子节点,要求左子节点的值比当前节点的值小,右子节点的值比当前节点的值大。若有相同的值,可将该节点放在左子节点或右子节点。
技术交流
2022/11/18
4220
二叉排序(查找)树(Java实现)
leetcode144-二叉树的前序遍历
  首先我们需要了解什么是二叉树的前序遍历:按照访问根节点——左子树——右子树的方式遍历这棵树,而在访问左子树或者右子树的时候,我们按照同样的方式遍历,直到遍历完整棵树。因此整个遍历过程天然具有递归的性质,我们可以直接用递归函数来模拟这一过程。
别团等shy哥发育
2023/02/25
2070
leetcode144-二叉树的前序遍历
数据结构与算法(3)——树(二叉、二叉搜索树)树LeetCode相关题目整理
树是一种类似于链表的数据结构,不过链表的结点是以线性方式简单地指向其后继结点,而树的一个结点可以指向许多个结点;数是一种典型的非线性结构;树结构是以表达具有层次特性的图结构的一种方法;
我没有三颗心脏
2018/07/24
1.2K0
数据结构与算法(3)——树(二叉、二叉搜索树)树LeetCode相关题目整理
Java集合与数据结构——二叉树02
我们将求二叉树的叶子节点数量这个问题,看成求 二叉树的 左子树的叶子节点 + 右子树的叶子节点
RAIN7
2022/03/29
2020
Java集合与数据结构——二叉树02
常考算法面试题系列:树的遍历
这种方法以深度 depth 优先为策略,从根节点开始一直遍历到某个叶子节点,然后回到根节点,在遍历另外一个分支。
木子星兮
2020/07/17
7390
常考算法面试题系列:树的遍历
【JavaScript 算法】树的遍历:前序、中序与后序
树的遍历是树操作中的基础内容,通过不同的遍历方法,我们可以以不同的顺序访问树中的节点:
空白诗
2024/07/20
2120
【JavaScript 算法】树的遍历:前序、中序与后序
图解LeetCode——98. 验证二叉搜索树
给你一个二叉树的根节点 root ,判断其是否是一个有效的二叉搜索树。 有效 二叉搜索树定义如下:
爪哇缪斯
2023/06/01
2290
图解LeetCode——98. 验证二叉搜索树
二叉树刷题总结:二叉树的遍历方式
二叉树的遍历方式分为俩种,一种是深度优先遍历也就是我们常说的 DFS,另一种是广度优先遍历我们常用 BFS 来称呼;深度优先遍历实现的方法有俩种,一种是递归还有一种是迭代,而广度优先遍历则是利用队列来实现的,我们称之为层序遍历。
HelloWorld杰少
2022/08/04
2130
图解LeetCode——98. 验证二叉搜索树
给你一个二叉树的根节点 root ,判断其是否是一个有效的二叉搜索树。有效 二叉搜索树定义如下:
爪哇缪斯
2023/09/06
1990
图解LeetCode——98. 验证二叉搜索树
LintCode 验证二叉查找树题目分析代码
2 / 1 4 / 3 5 上述这棵二叉树序列化为 {2,1,4,#,#,3,5}.
desperate633
2018/08/22
3740
验证二叉搜索树
最开始看到这道题的时候,以为是直接判断 node.right.val > node.val 和 node.left.val < node.val 对每个结点是否成立。但是这种是忽略了,二叉搜索树还有一个很重要的特点就是,左子树上所有节点的值均小于它的根节点的值,右子树上所有节点的值均大于它的根节点的值。注意是左子树和右子树所有的节点都满足才行。
木子星兮
2020/07/17
6890
二叉排序树
版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
喜欢ctrl的cxk
2019/11/08
4760
相关推荐
二叉排序树:数据存储的艺术
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档