目录

  • 二叉树结点类
  • 二叉树类
    • 采用先序遍历求二叉树高的算法int height()方法

二叉树结点类

public class BinaryNode<T> {public T data;public BinaryNode<T> left,right;public BinaryNode(T data,BinaryNode<T> left,BinaryNode<T> right){this.data=data;this.left=left;this.right=right;}public BinaryNode(T data){this(data,null,null);}public String toString(){return this.data.toString();}}

二叉树类

public class BinaryTree<T> {public BinaryNode<T> root;public BinaryTree(){this.root=null;}public BinaryTree(BinaryTree<T> bitree){this.root=copy(bitree.root);}private BinaryNode<T> copy(BinaryNode<T> p){if(p==null)return null;BinaryNode<T> q=new BinaryNode<T>(p.data);q.left=copy(p.left);q.right=copy(p.right);return q;}public BinaryNode<T> insert(T x){return this.root=new BinaryNode<T> (x,null,null);}public BinaryNode<T> insert(BinaryNode<T> parent,T x,boolean leftChild){if(x==null)return null;if(leftChild)return parent.left=new BinaryNode<T>(x,parent.left,null);return parent.right=new BinaryNode<T>(x,null,parent.right);}public void preorder(){preorder(this.root);System.out.println();}public void preorder(BinaryNode<T> p){if(p!=null){System.out.print(p.data.toString());preorder(p.left);preorder(p.right);}}
/*  public void postorderTraverse(){BinaryNode<T> p=this.root;BinaryNode<T> q=p;LinkedStack<BinaryNode<T>> stack=new LinkedStack<BinaryNode<T>>(); while (p != null) {  // 左子树入栈  for (; p.left != null; p = p.left){  stack.push(p); } // 当前节点无右子或右子已经输出  while (p != null && (p.right == null || p.right == q)) {  System.out.println(p.toString()); System.out.println(stack.toString()+"");q = p;// 记录上一个已输出节点  if (stack.isEmpty())  return;  p = stack.pop(); System.out.println(stack.toString()+"");}  // 处理右子  stack.push(p);  p = p.right;  }}*/  public int height(){if(this.root==null)return 0;LinkedStack<BinaryNode<T>> stack=new LinkedStack<BinaryNode<T>>();int maxheight=0;int i=0;BinaryNode<T> p=this.root;BinaryNode<T> q=p;OUT:while (p != null) {  // 左子树入栈  for (; p.left != null; p = p.left){  stack.push(p); i++;maxheight=maxheight>i?maxheight:i;} // 当前节点无右子或右子已经输出  while (p != null && (p.right == null || p.right == q)) {  System.out.println(p.toString()); if(p.right!=q&&p.left!=p){i++;maxheight=maxheight>i?maxheight:i;}elsei--;q = p;// 记录上一个已输出节点            if (stack.isEmpty())  {break OUT;}else{p = stack.pop(); i--;}}  // 处理右子  stack.push(p);i++;maxheight=maxheight>i?maxheight:i;p = p.right;  }System.out.print("Height:");return maxheight;}/*递归public int height(){return height(root);}public int height(BinaryNode<T> root){if(root==null)return 0;int L_height=height(root.left);int R_height=height(root.right);return (L_height>=R_height)?L_height+1:R_height+1;}*/public static void main(String[] args) {String[] list={"A","B","C","D","E","F","G"};BinaryTree<String> tree=new BinaryTree<String>();tree.insert(list[0]);tree.insert(tree.root, list[1],true);tree.insert(tree.root,list[2],false);tree.insert(tree.root.left, list[3], true);tree.insert(tree.root.left, list[4], false);tree.insert(tree.root.left.right, list[5], true);tree.insert(tree.root.left.left, list[6], false);tree.preorder();int i= tree.height();System.out.println(i);//tree.postorderTraverse();//深拷贝BinaryTree<String> ctree=new BinaryTree<String>();ctree.copy(tree.root);}}

采用先序遍历求二叉树高的算法int height()方法

JAVA数据结构二叉树高度计算相关推荐

  1. java数据结构二叉树遍历_java数据结构 之 二叉树的遍历(1)

    树(tree)是一种抽象数据类型(ADT),用来模拟具有树状结构性质的数据集合.它是由n(n>0)个有限节点通过连接它们的边组成一个具有层次关系的集合 节点:上图的圆圈,比如A,B,C等都是表示 ...

  2. Java数据结构——二叉树的遍历

    作者:敲代码の流川枫 博客主页:流川枫的博客 专栏:和我一起学java 语录:Stay hungry stay foolish 工欲善其事必先利其器,给大家介绍一款超牛的斩获大厂offer利器--牛客 ...

  3. 数据结构----二叉树叶子结点到根节点的高度计算

    数据结构----二叉树叶子结点到根节点的高度计算 代码: #include<stdio.h> #include<stdlib.h> typedef struct bstTree ...

  4. Java数据结构——认识二叉树

    作者:敲代码の流川枫 博客主页:流川枫的博客 专栏:和我一起学java 语录:Stay hungry stay foolish 工欲善其事必先利其器,给大家介绍一款超牛的斩获大厂offer利器--牛客 ...

  5. 3010基于二叉链表的二叉树高度的计算(附思路,WA的一种可能情况及代码)

    基于二叉链表的二叉树高度的计算 描述 设二叉树中每个结点的元素均为一个字符,按先序遍历的顺序建立二叉链表,编写递归算法计算二叉树的高度. 输入 多组数据.每组数据一行,为二叉树的前序序列(序列中元素为 ...

  6. 二叉树 BinaryTree (先序、中序、后序遍历 节点查找、插入、删除 完整类) Java数据结构与算法

    二叉树 BinaryTree (先序.中序.后序遍历 节点查找.插入.删除 完整类) Java数据结构与算法 源代码: view plain /** * * @author sunnyykn */ i ...

  7. 数据结构(3) 第三天 栈的应用:就近匹配/中缀表达式转后缀表达式 、树/二叉树的概念、二叉树的递归与非递归遍历(DLR LDR LRD)、递归求叶子节点数目/二叉树高度/二叉树拷贝和释放...

    01 上节课回顾 受限的线性表 栈和队列的链式存储其实就是链表 但是不能任意操作 所以叫受限的线性表 02 栈的应用_就近匹配 案例1就近匹配: #include <stdio.h> in ...

  8. 3010基于二叉链表的二叉树高度的计算

    描述 设二叉树中每个结点的元素均为一个字符,按先序遍历的顺序建立二叉链表,编写递归算法计算二叉树的高度. 输入 多组数据.每组数据一行,为二叉树的前序序列(序列中元素为'0'时,表示该结点为空).当输 ...

  9. 基于二叉链表的二叉树高度的计算

    描述 设二叉树中每个结点的元素均为一个字符,按先序遍历的顺序建立二叉链表,编写递归算法计算二叉树的高度. 输入 多组数据.每组数据一行,为二叉树的前序序列(序列中元素为'0'时,表示该结点为空).当输 ...

最新文章

  1. python调用oracle数据库_python操作oracle数据库
  2. win10安装部署网络测试工具 NetCat 用于Spark跑测试
  3. 浅谈JSP表单中的form传值
  4. java test circle_java-使用Jacoco和Circle CI生成测试覆盖率失败
  5. java两个数的最大公约数和最小公倍数
  6. linux看网卡ip,linux查看ip地址、显示太网卡配置、网络设备
  7. SVD分解求解超定方程Ax=0
  8. 工业物联网的体系架构
  9. matlab做gui界面抛体运动,用MATLAB进行抛体运动中的探讨模拟
  10. 【寒江雪】UV+Depth信息计算世界坐标
  11. python 文件操作OS总结
  12. 评价模型——目标权重的确定
  13. 北京烤鸭+腊肉炒花菜+香椿炒蛋
  14. 程序跑飞的原因与解决办法(转载)
  15. 按条件隐藏bootstrapTable某一列
  16. 计算机主机是啥意思,pc是什么_pc是什么意思
  17. android 分享微信 不审核,ShareSDK Android 微信分享 绕过审核与不绕过审核
  18. alignment fault
  19. httpclient的maven依赖
  20. Processing 基本函数绘制图形

热门文章

  1. Linux centos 下 eclipse 打开文件时关闭
  2. js 字符串转换数字
  3. Excel隐藏多行,如何一次全部展开显示或取消隐藏
  4. Ingress 使用域名访问服务
  5. ELK性能优化实战总结:我强任我强,你“跪”标准好好学
  6. PHP日志库 - Monolog 知识整理
  7. keycloak 配置 mysql_keycloak集群
  8. Keycloak概述
  9. 男人深爱老婆的96个经典细节
  10. mysql b tree_Mysql索引机制(B+Tree)