java二叉树的深度_Java实现二叉树的深度计算
尝试不同方法求二叉树的深度:
1.depth1,递归计算二叉树的深度,根结点的深度=max(左子树的深度,右子树的深度) + 1。
2.depth2,访问左结点,如有右结点则压栈1,同时把右结点的深度压栈2,没有左结点时表示该次遍历完成,记录深度;从栈1取出结点,栈2取出该结点的深度,再次遍历。
3.depth3,利用层序遍历的思想,每完成一层的遍历就给一个标记。
package com.devchao.tree;
import java.util.LinkedList;
import java.util.Queue;
import java.util.Stack;
public class BinaryTree {
public static void main(String[] args) {
Node n15 = new Node(15, null, null);
Node n14 = new Node(14, n15, null);
Node n13 = new Node(13, null, n14);
Node n12 = new Node(12, n13, null);
Node n11 = new Node(11, null, n12);
Node n5 = new Node(5, null, null);
Node n6 = new Node(6, null, null);
Node n8 = new Node(8, null, null);
Node n9 = new Node(9, n11, null);
Node n10 = new Node(10, null, null);
Node n7 = new Node(7, n8, null);
Node n4 = new Node(4, n6, n7);
Node n3 = new Node(3, null, n5);
Node n2 = new Node(2, n9, n10);
Node n1 = new Node(1, n3, n4);
Node root = new Node(0, n1, n2);
System.out.println(depth3(root));
}
public static int depth1(Node root){
int dep1 = 1, dep2 = 1;
if(root.left != null) {
dep1 = dep1 + depth1(root.left);
}
if(root.right != null) {
dep2 = dep2 + depth1(root.right);
}
System.out.println(root.data + " " + dep1 + " " + dep2);
return dep1 >= dep2 ? dep1 : dep2;
}
public static int depth2(Node root){
int dep = 1, tempDep = 1;
Stack q = new Stack();
Stack dq = new Stack();
Node node = root;
while(node != null || !q.isEmpty()) {
if(node == null) {
node = q.pop();
dep = dep < tempDep ? tempDep : dep;
tempDep = dq.pop();
}
if(node.right != null) {
dq.add(tempDep + 1);
q.add(node.right);
}
if(node.left != null) {
tempDep = tempDep + 1;
}
node = node.left;
}
return dep;
}
public static int depth3(Node root){
int dep = 0, tempTag = 0;
Queue queue = new LinkedList<>();
queue.add(root);
Queue tagQueue = new LinkedList<>();
tagQueue.add(1);
while(!queue.isEmpty()) {
root = queue.poll();
if(root.left != null) {
queue.add(root.left);
tagQueue.add(0);
}
if(root.right != null) {
queue.add(root.right);
tagQueue.add(0);
}
tempTag = tagQueue.poll();
if(tempTag == 1) {
dep = dep + 1;
if(!tagQueue.isEmpty()) {
tagQueue.remove();
tagQueue.add(1);
}
}
}
return dep;
}
static class Node {
public int data;
public Node left;
public Node right;
public Node(int data, Node left, Node right) {
this.data = data;
this.left = left;
this.right = right;
}
}
}
java二叉树的深度_Java实现二叉树的深度计算相关推荐
- java 递归深度优先遍历_Java基础 - 二叉树的遍历之深度优先遍历(递归遍历)
package com.yc.test; import java.util.ArrayList; import java.util.List; import com.yc.tree.ThreeLink ...
- java二叉树是什么_java数据结构二叉树是什么?特点是?
二叉树是什么?学习java的小伙伴可能经常会听到这个词,但具体是什么又不可知,下面小编就来带你详细了解下二叉树. 二叉树概念 二叉树,指计算机中的一种树结构,这种树结构中每个结点至多只有两个子树,它们 ...
- 二叉树遍历算法的应用——计算二叉树的深度、计算二叉树的节点总数、计算二叉树的叶子节点数(均采用递归的思想)
//二叉树遍历算法的应用 //1.计算二叉树的深度 int Depth(BitTree T){if(T==NULL)return 0;//如果是空树,返回0else{m=Depth(T->lch ...
- 二叉树的深度python_求二叉树的深度 python
题目描述 输入一棵二叉树,求该树的深度.从根结点到叶结点依次经过的结点(含根.叶结点)形成树的一条路径,最长路径的长度为树的深度. 解题思路 两种解法,一种是第一时间的思路,即获得根节点到每个叶节点的 ...
- java 文件遍历排序_Java的二叉树排序以及遍历文件展示文本格式的文件树
Java二叉树排序算法排序二叉树的描述也是一个递归的描述, 所以排序二叉树的构造自然也用递归的: 排序二叉树的3个特征: 1:当前node的所有左孩子的值都小于当前node的值: 2:当前node的所 ...
- java 二叉树的高度_Java实现二叉树的建立、计算高度与递归输出操作示例
本文实例讲述了java实现二叉树的建立.计算高度与递归输出操作.分享给大家供大家参考,具体如下: 1. 建立 递归输出 计算高度 前中后三种非递归输出 public class Tree_Link { ...
- java遍历树结构数据_Java数据结构——二叉树的遍历(汇总)
二叉树的遍历分为深度优先遍历(DFS)和广度优先遍历(BFS) DFS遍历主要有: 前序遍历 中序遍历 后序遍历 一.递归实现DFS Node.java: public class Node { pr ...
- java二叉树怎么初始化_java实现二叉树常见操作
packagecom.xk.test.struct.newp;importjava.util.ArrayList;importjava.util.LinkedList;importjava.util. ...
- 面试题39:二叉树的深度、判断二叉树是不是平衡
题目一: 1 int TreeDepth(BinaryTreeNode* pRoot) 2 { 3 if(pRoot == NULL) 4 return 0; 5 6 int nLeft = Tree ...
最新文章
- AWS攻略——使用CodeBuild进行自动化构建和部署Lambda(Python)
- C#3.0 为我们带来什么(2) —— 自动属性
- sizeof和strlen的区别
- C# 如果何从线程中操作控件
- 如何成为一位牛逼的高手
- MySQL在其版本迭代后Online DDL功能发生了哪些变化?
- 《Reids 设计与实现》第五章 对象
- galaxy+tab+查看android+版本,三星第一代Galaxy Tab将更新至安卓4.1.2版本
- wpf之windows设置WindowStyle为None
- seo关键词布局,网页头部优化(TDK),网站优化(古志强网络营销师)
- 为什么项目验收前的总是非常忙乱?
- 超美二次元响应式引导页源码
- 数据基础---《利用Python进行数据分析·第2版》第11章 时间序列
- 瓷片电容、钽电容、电解电容区别---电源设计中的去耦电容应用实例
- 上海财经计算机专业考研,考研择校:魔都的复旦、同济、上财哪个更有前途?看网友怎么说!...
- 易数云数据抓取词云图制作
- Qt编写可视化大屏电子看板系统8-调整间距
- 恶梦护士 asa_敏捷街上的噩梦2:受控敏捷
- 基于雨流计数法的源-荷-储双层协同优化配置研究(Matlab代码实现)
- 项目管理project模板_项目经理必备的6款项目管理软件