尝试不同方法求二叉树的深度:

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实现二叉树的深度计算相关推荐

  1. java 递归深度优先遍历_Java基础 - 二叉树的遍历之深度优先遍历(递归遍历)

    package com.yc.test; import java.util.ArrayList; import java.util.List; import com.yc.tree.ThreeLink ...

  2. java二叉树是什么_java数据结构二叉树是什么?特点是?

    二叉树是什么?学习java的小伙伴可能经常会听到这个词,但具体是什么又不可知,下面小编就来带你详细了解下二叉树. 二叉树概念 二叉树,指计算机中的一种树结构,这种树结构中每个结点至多只有两个子树,它们 ...

  3. 二叉树遍历算法的应用——计算二叉树的深度、计算二叉树的节点总数、计算二叉树的叶子节点数(均采用递归的思想)

    //二叉树遍历算法的应用 //1.计算二叉树的深度 int Depth(BitTree T){if(T==NULL)return 0;//如果是空树,返回0else{m=Depth(T->lch ...

  4. 二叉树的深度python_求二叉树的深度 python

    题目描述 输入一棵二叉树,求该树的深度.从根结点到叶结点依次经过的结点(含根.叶结点)形成树的一条路径,最长路径的长度为树的深度. 解题思路 两种解法,一种是第一时间的思路,即获得根节点到每个叶节点的 ...

  5. java 文件遍历排序_Java的二叉树排序以及遍历文件展示文本格式的文件树

    Java二叉树排序算法排序二叉树的描述也是一个递归的描述, 所以排序二叉树的构造自然也用递归的: 排序二叉树的3个特征: 1:当前node的所有左孩子的值都小于当前node的值: 2:当前node的所 ...

  6. java 二叉树的高度_Java实现二叉树的建立、计算高度与递归输出操作示例

    本文实例讲述了java实现二叉树的建立.计算高度与递归输出操作.分享给大家供大家参考,具体如下: 1. 建立 递归输出 计算高度 前中后三种非递归输出 public class Tree_Link { ...

  7. java遍历树结构数据_Java数据结构——二叉树的遍历(汇总)

    二叉树的遍历分为深度优先遍历(DFS)和广度优先遍历(BFS) DFS遍历主要有: 前序遍历 中序遍历 后序遍历 一.递归实现DFS Node.java: public class Node { pr ...

  8. java二叉树怎么初始化_java实现二叉树常见操作

    packagecom.xk.test.struct.newp;importjava.util.ArrayList;importjava.util.LinkedList;importjava.util. ...

  9. 面试题39:二叉树的深度、判断二叉树是不是平衡

    题目一: 1 int TreeDepth(BinaryTreeNode* pRoot) 2 { 3 if(pRoot == NULL) 4 return 0; 5 6 int nLeft = Tree ...

最新文章

  1. AWS攻略——使用CodeBuild进行自动化构建和部署Lambda(Python)
  2. C#3.0 为我们带来什么(2) —— 自动属性
  3. sizeof和strlen的区别
  4. C# 如果何从线程中操作控件
  5. 如何成为一位牛逼的高手
  6. MySQL在其版本迭代后Online DDL功能发生了哪些变化?
  7. 《Reids 设计与实现》第五章 对象
  8. galaxy+tab+查看android+版本,三星第一代Galaxy Tab将更新至安卓4.1.2版本
  9. wpf之windows设置WindowStyle为None
  10. seo关键词布局,网页头部优化(TDK),网站优化(古志强网络营销师)
  11. 为什么项目验收前的总是非常忙乱?
  12. 超美二次元响应式引导页源码
  13. 数据基础---《利用Python进行数据分析·第2版》第11章 时间序列
  14. 瓷片电容、钽电容、电解电容区别---电源设计中的去耦电容应用实例
  15. 上海财经计算机专业考研,考研择校:魔都的复旦、同济、上财哪个更有前途?看网友怎么说!...
  16. 易数云数据抓取词云图制作
  17. Qt编写可视化大屏电子看板系统8-调整间距
  18. 恶梦护士 asa_敏捷街上的噩梦2:受控敏捷
  19. 基于雨流计数法的源-荷-储双层协同优化配置研究(Matlab代码实现)
  20. 项目管理project模板_项目经理必备的6款项目管理软件

热门文章

  1. [Leetcode]Two sum(两数之和)系列总结
  2. 电源布线工程师谈电源PCB设计
  3. 人工智能走进中小学课堂法则
  4. Cisco NAT转换
  5. pyecharts 介绍
  6. VMware虚拟机和主机如何实现文件共享方法
  7. KNIME服务器相关接口的实现
  8. [Python]*词云图生成——默认和图片蒙版词云图
  9. mysql中井号的作用_URL 链接中 井号#、问号?、连接符 分别有什么作用?
  10. 因玩家未经授权直播《王者荣耀》游戏,抖音火山版被判赔偿腾讯 800 万元