JAVA数据结构二叉树高度计算
目录
- 二叉树结点类
- 二叉树类
- 采用先序遍历求二叉树高的算法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数据结构二叉树高度计算相关推荐
- java数据结构二叉树遍历_java数据结构 之 二叉树的遍历(1)
树(tree)是一种抽象数据类型(ADT),用来模拟具有树状结构性质的数据集合.它是由n(n>0)个有限节点通过连接它们的边组成一个具有层次关系的集合 节点:上图的圆圈,比如A,B,C等都是表示 ...
- Java数据结构——二叉树的遍历
作者:敲代码の流川枫 博客主页:流川枫的博客 专栏:和我一起学java 语录:Stay hungry stay foolish 工欲善其事必先利其器,给大家介绍一款超牛的斩获大厂offer利器--牛客 ...
- 数据结构----二叉树叶子结点到根节点的高度计算
数据结构----二叉树叶子结点到根节点的高度计算 代码: #include<stdio.h> #include<stdlib.h> typedef struct bstTree ...
- Java数据结构——认识二叉树
作者:敲代码の流川枫 博客主页:流川枫的博客 专栏:和我一起学java 语录:Stay hungry stay foolish 工欲善其事必先利其器,给大家介绍一款超牛的斩获大厂offer利器--牛客 ...
- 3010基于二叉链表的二叉树高度的计算(附思路,WA的一种可能情况及代码)
基于二叉链表的二叉树高度的计算 描述 设二叉树中每个结点的元素均为一个字符,按先序遍历的顺序建立二叉链表,编写递归算法计算二叉树的高度. 输入 多组数据.每组数据一行,为二叉树的前序序列(序列中元素为 ...
- 二叉树 BinaryTree (先序、中序、后序遍历 节点查找、插入、删除 完整类) Java数据结构与算法
二叉树 BinaryTree (先序.中序.后序遍历 节点查找.插入.删除 完整类) Java数据结构与算法 源代码: view plain /** * * @author sunnyykn */ i ...
- 数据结构(3) 第三天 栈的应用:就近匹配/中缀表达式转后缀表达式 、树/二叉树的概念、二叉树的递归与非递归遍历(DLR LDR LRD)、递归求叶子节点数目/二叉树高度/二叉树拷贝和释放...
01 上节课回顾 受限的线性表 栈和队列的链式存储其实就是链表 但是不能任意操作 所以叫受限的线性表 02 栈的应用_就近匹配 案例1就近匹配: #include <stdio.h> in ...
- 3010基于二叉链表的二叉树高度的计算
描述 设二叉树中每个结点的元素均为一个字符,按先序遍历的顺序建立二叉链表,编写递归算法计算二叉树的高度. 输入 多组数据.每组数据一行,为二叉树的前序序列(序列中元素为'0'时,表示该结点为空).当输 ...
- 基于二叉链表的二叉树高度的计算
描述 设二叉树中每个结点的元素均为一个字符,按先序遍历的顺序建立二叉链表,编写递归算法计算二叉树的高度. 输入 多组数据.每组数据一行,为二叉树的前序序列(序列中元素为'0'时,表示该结点为空).当输 ...
最新文章
- python调用oracle数据库_python操作oracle数据库
- win10安装部署网络测试工具 NetCat 用于Spark跑测试
- 浅谈JSP表单中的form传值
- java test circle_java-使用Jacoco和Circle CI生成测试覆盖率失败
- java两个数的最大公约数和最小公倍数
- linux看网卡ip,linux查看ip地址、显示太网卡配置、网络设备
- SVD分解求解超定方程Ax=0
- 工业物联网的体系架构
- matlab做gui界面抛体运动,用MATLAB进行抛体运动中的探讨模拟
- 【寒江雪】UV+Depth信息计算世界坐标
- python 文件操作OS总结
- 评价模型——目标权重的确定
- 北京烤鸭+腊肉炒花菜+香椿炒蛋
- 程序跑飞的原因与解决办法(转载)
- 按条件隐藏bootstrapTable某一列
- 计算机主机是啥意思,pc是什么_pc是什么意思
- android 分享微信 不审核,ShareSDK Android 微信分享 绕过审核与不绕过审核
- alignment fault
- httpclient的maven依赖
- Processing 基本函数绘制图形