分治法在二叉树遍历中的应用(JAVA)--二叉查找树高度、前序遍历、中序遍历、后序遍

分治法在二叉树遍历中的应用

二叉树本身就是由两个更小的部分组成--左子树和右子树,所以二叉树的问题非常适合用分治法来解决。

二叉树的高度:从叶子到根之间的最长路径。我们可以理解为根的左子树高度和右子树高度加1(加1代表根所在的层)。

定义空树的高度为-1

private static int height(Node node) {if (node == null) {return -1;}return Math.max(height(node.l), height(node.r)) + 1;
}

T(n) = T(left) + T(right) + 1由递推式可得时间复杂度为O(n)

二叉树遍历:

/*** 先序遍历* */private static void preorder(Node node) {System.out.print(node.v + " ");if (node.l != null)preorder(node.l);if (node.r != null)preorder(node.r);}/*** 中序遍历* */private static void midorder(Node node) {if (node.l != null)preorder(node.l);System.out.print(node.v + " ");if (node.r != null)preorder(node.r);}/*** 后序遍历* */private static void nextorder(Node node) {if (node.l != null)preorder(node.l);if (node.r != null)preorder(node.r);System.out.print(node.v + " ");}

完整代码:

class Node {int v;Node l;Node r;public Node(int v) {this.v = v;}
}
public class Main {public static Node root;private static int height(Node node) {if (node == null) {return -1;}return Math.max(height(node.l), height(node.r)) + 1;}private static boolean insert(Node node) {if (root == null) {root = node;return true;}Node cur = root;while (cur != null) {if (node.v > cur.v) {if (cur.r == null) {cur.r = node;return true;}cur = cur.r;} else {if (cur.l == null) {cur.l = node;return true;}cur = cur.l;}}return false;}/*** 先序遍历* */private static void preorder(Node node) {System.out.print(node.v + " ");if (node.l != null)preorder(node.l);if (node.r != null)preorder(node.r);}/*** 中序遍历* */private static void midorder(Node node) {if (node.l != null)preorder(node.l);System.out.print(node.v + " ");if (node.r != null)preorder(node.r);}/*** 后序遍历* */private static void nextorder(Node node) {if (node.l != null)preorder(node.l);if (node.r != null)preorder(node.r);System.out.print(node.v + " ");}public static void main(String[] args) {/*** 插入* */insert(new Node(20));insert(new Node(10));insert(new Node(30));/*** 前序遍历* */preorder(root);nextorder(root);midorder(root);System.out.println(height(root));}
}


当然,并非所有关于二叉树的算法都需要遍历两颗子树,诸如二叉树的查找、插入、删除操作只需要遍历其中一棵,有兴趣的读者可以参考减治法在查找算法中的应用(JAVA)--二叉查找树的查找、插入、删除这篇文章。

关于二叉树感兴趣的朋友还可以继续学习一篇文章搞定面试中的二叉树题目(java实现)




本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/569763.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Excel中用REPT函数制作图表

本文从以下七个方面,阐述在Excel中用REPT函数制作图表: 一. 图形效果展示 二. REPT语法解释 三. REPT制作条形图 四. REPT制作漏斗图 五. REPT制作蝴蝶图 六. REPT制作柱状图 七. REPT制作甘特图 一. 图形效果展示 这些图表都是用REPT函数制作成的&#…

分治法在求解“最近对”问题中的应用(JAVA)

分治法在求解“最近对”问题中的应用 最近对问题在蛮力法中有过讲解&#xff0c;时间复杂度为O(n^2)&#xff0c;下面将会采用分治法讲解这类问题&#xff0c;时间复杂度会降到O(nlogn) 我们将笛卡尔平面上n>1个点构成的集合称为P。若2< n < 3时&#xff0c;我们1可…

【转】python的复制,深拷贝和浅拷贝的区别

在python中&#xff0c;对象赋值实际上是对象的引用。当创建一个对象&#xff0c;然后把它赋给另一个变量的时候&#xff0c;python并没有拷贝这个对象&#xff0c;而只是拷贝了这个对象的引用 一般有三种方法&#xff0c; alist[1,2,3,["a","b"]] &#x…

分治法在求解凸包问题中的应用(JAVA)--快包算法

分治法在求解凸包问题中的应用&#xff08;JAVA&#xff09; 之前写过一篇蛮力法在求解凸包问题中的应用&#xff08;JAVA&#xff09;还算简单易懂&#xff0c;没有基础的读者最好先去阅读以下。这里用分治法来求解凸包问题&#xff0c;由于这个算法和快速排序十分相似&#x…

django class类即视图类添加装饰器的几种方法

根据别人发布整理&#xff0c;个人爱好收集&#xff08;原文&#xff1a;https://blog.csdn.net/mydistance/article/details/83958655 &#xff09; 一、定义视图类 定义类视图&#xff0c;且类视图继承自View&#xff08;举例&#xff09; from django.views.generic import …

动态规划在求解硬币问题中的应用(JAVA)--币制最大化、找零问题、硬币收集问题

动态规划&#xff1a;这种算法思想多用来求解最优化问题&#xff0c;因此这里存在一个最优化法则&#xff0c;法则指出最优化问题任一实例的最优解&#xff0c;都是由其子实例的最优解构成的。一般来说&#xff0c;自底向上的动态规划更容易设计&#xff0c;但是带有记忆功能的…

使用网络TCP搭建一个简单文件下载器

说明&#xff1a;该篇博客是博主一字一码编写的&#xff0c;实属不易&#xff0c;请尊重原创&#xff0c;谢谢大家&#xff01; 目录 一丶项目介绍 二丶服务器Server 三丶测试TCP server服务器 四丶客户端Client 五丶测试客户端向服务器下载文件 一丶项目介绍 1.叙述 生活中大家…

动态规划在求解背包问题中的应用(JAVA)--回溯法、记忆化法

动态规划在求解背包问题中的应用 背包问题向来是动态规划的典型问题&#xff0c;给定n个重量为w1,w2,...,wn&#xff0c;价值为v1,v2,...,vn的物品和一个称重量为W的背包&#xff0c;求这些物品中最优价值的一个子集&#xff0c;且能够装到背包中。 之前用蛮力法做过背包问题蛮…

JS跨域问题

因为浏览器的同源策略&#xff0c;默认情况下&#xff0c;JavaScript在发送AJAX请求时&#xff0c;URL的域名必须和当前页面完全一致。 完全一致的意思是&#xff0c;域名要相同&#xff08;www.example.com和example.com不同&#xff09;&#xff0c;协议要相同&#xff08;ht…

svn 服务器的搭建以及客户端的使用

1、svn 服务器的搭建以及客户端的使用&#xff0c;安装见下面的博客 https://blog.csdn.net/zh123456zh789/article/details/80921179 说明&#xff1a;服务器只是用来存储数据&#xff0c;服务器上的数据可以通过客户端torisesvn进行操作。比如将自己的项目存到服务器&#xf…

动态规划在求解传递闭包问题中的应用(JAVA)--Warshell算法

动态规划在求解传递闭包问题中的应用&#xff1a; 传递闭包&#xff1a;对于n个顶点有向图来说&#xff0c;如果第i个顶点到第j个顶点之间存在一条有效的有向路径&#xff08;即长度大于0的路径&#xff09;&#xff0c;那么T(i, j) 1,否则T(i, j) 0。例如&#xff1a;求解传…

Centos 7 LVM xfs文件系统修复

情况1&#xff1a; [sda] Assuming drive cache: write through Internal error xfs XFS_WANT_CORRUPTED_GOTO at line 1662 of file fs/xfs/libxfs/xfs_alloc.c Caller xfs_free_extent0x130 [xfs] Internal error xfs_trans_cancel at line 990 of file fs/xfs/xfs_trans.c.C…

动态规划在求解全源最短路径中的应用(JAVA)--Floyd算法

参考图论算法&#xff08;二&#xff09;-最短路径的Dijkstra [ 单源 ] 和Floyd[ 多源 ] 解法&#xff08;JAVA &#xff09;这种算法也叫Floyd-Warshell算法&#xff0c;虽然和Warshell算法名字相近&#xff0c;算法思想也相近&#xff0c;但确实是两种算法。对于一个带权图&a…

录播图的分页使用进度条形式显示

本次我是使用的slick轮播图插件&#xff0c;其官网网址如下&#xff1a; http://kenwheeler.github.io/slick/&#xff0c;下面是轮播图中的代码&#xff0c;如果你不知道效果是什么样子&#xff0c;亦可以去看一下阿里云的官网&#xff1a;https://www.aliyun.com/?utm_conte…

贪婪算法在求解最小生成树中的应用(JAVA)--Prim算法

贪婪算法&#xff1a;通过一系列步骤来构造问题的解&#xff0c;每一步对目前构造的部分分解做一个拓展&#xff0c;直到获得问题的完整解为止,而算法的核心思想就在于&#xff0c;算法的每一步都必须满足以下条件&#xff1a;可行&#xff08;满足问题的约束条件&#xff09;、…

requirements.txt

在文件夹下 生成requirements.txt文件 pip freeze > requirements.txt 安装requirements.txt依赖 pip install -r requirements.txt转载于:https://www.cnblogs.com/z-x-y/p/10420853.html

贪婪算法在求解最小生成树中的应用(JAVA)--Kruskal算法

Kruskal算法又被称为“加边法”&#xff0c;这种算法会将加权连通图的最小生成树看成具有V-1条边的无环子图&#xff0c;且边的权重和最小。算法开始时&#xff0c;会按照权重的非递减顺序对图中的边排序&#xff0c;之后迭代的以贪婪的方式添加边。 下面以下图为例来讲解Krusk…

[ZJOI2016]大森林

Description&#xff1a; 小Y家里有一个大森林&#xff0c;里面有n棵树&#xff0c;编号从1到n 0 l r 表示将第 l 棵树到第 r 棵树的生长节点下面长出一个子节点&#xff0c;子节点的标号为上一个 0 号操作叶子标号加 1&#xff08;例如&#xff0c;第一个 0 号操作产生的子节点…

贪婪算法在求解最短路径中的应用(JAVA)--Dijkstra算法

最短路径问题最经典的算法就是Dijkstra算法&#xff0c;虽然不如Floyd算法能够求全源的最短路径&#xff0c;但是在效率上明显强于Floyd算法。 想了解Floyd算法的读者可以参考动态规划在求解全源最短路径中的应用&#xff08;JAVA&#xff09;--Floyd算法 单源最短路径问题是对…

「SCOI2014」方伯伯的 OJ 解题报告

「SCOI2014」方伯伯的 OJ 和列队有点像&#xff0c;平衡树点分裂维护即可 但是需要额外用个set之类的对编号查找点的位置 插入完了后记得splay&#xff0c;删除时注意特判好多东西 Code: #include <cstdio> #include <cctype> #include <set> const int N2e5…