java二叉树实现、遍历、求深度
来源:互联网 发布:三大运营商哪个网络好 编辑:程序博客网 时间:2024/06/03 14:52
import java.util.*;class node{int data;node lchild;node rchild;public node(int value){data=value;lchild=null;rchild=null;}}class BiTree{ArrayList nodeList;//nodelist即为树public BiTree(int[] a){//传入一个数组nodeList=new ArrayList();for(int i=0;i<a.length;i++)//先将数组每个int转为node再链接nodeList.add(new node(a[i]));for(int i=0;i<a.length/2-1;i++){//最后一个内部结点可能没有右孩子nodeList.get(i).lchild=nodeList.get((i+1)*2-1);nodeList.get(i).rchild=nodeList.get((i+1)*2);}if(a.length % 2==1){//有nodeList.get(a.length/2-1).lchild=nodeList.get(a.length-2);nodeList.get(a.length/2-1).rchild=nodeList.get(a.length-1);}else{nodeList.get(a.length/2-1).lchild=nodeList.get(a.length-1);}}public void Inorder(node n){//以node n为根的任意一棵树if(n==null)return;Inorder(n.lchild);System.out.print(n.data+" ");Inorder(n.rchild);}public void Preorder(node n){//以node n为根的任意一棵树if(n==null)return;System.out.print(n.data+" ");Preorder(n.lchild);Preorder(n.rchild);}public void Postorder(node n){//以node n为根的任意一棵树if(n==null)return;Postorder(n.lchild);Postorder(n.rchild);System.out.print(n.data+" ");} //前序遍历的非递归实现 public void nonRecPreorder(node n){ Stack stack=new Stack();//java自带的Stack node now=n; while(now!=null || stack.size()>0){ while(now!=null){//GoFarLeft System.out.print(now.data+" ");//先序 stack.push(now);//进栈 now=now.lchild; } if(stack.size()>0){ now=stack.pop(); now=now.rchild; } } } //中序遍历的非递归实现 public void nonRecInorder(node n){ Stack stack=new Stack();//java自带的Stack node now=n; while(now!=null || stack.size()>0){ while(now!=null){//GoFarLeft stack.push(now); now=now.lchild; } if(stack.size()>0){ now=stack.pop(); System.out.print(now.data+" "); now=now.rchild; } } } //后序遍历的非递归实现 public void nonRecPostorder(node n){ Stack stack=new Stack();//java自带的Stack node now=n; while(now!=null){ while(now.lchild!=null){//GoFarLeft,和前面的不一样在于停在叶节点(非null) stack.push(now); now=now.lchild; } while(now!=null && (now.rchild==null||now.rchild==n)){//当前结点无右子树或右子树已经输出.后序就是栈顶节点无右子树就输出 System.out.print(now.data+" "); n=now;//纪录上一个已输出结点 if(stack.empty()) return; now=stack.pop(); } //处理右子树 stack.push(now); now=now.rchild; } } public int height(node n){//求以n为根的树的深度 if(n==null) return 0; else{ if(n.lchild!=null && n.rchild!=null) return Math.max(height(n.lchild),height(n.rchild))+1; else if(n.lchild!=null && n.rchild==null) return height(n.lchild)+1; else if(n.rchild!=null && n.lchild==null) return height(n.rchild)+1; else return 1; } } }public class test{public static void main(String[] args){int a[]=new int[10];a[0]=1;a[1]=2;a[2]=3;a[3]=4;a[4]=5;a[5]=6;a[6]=7;a[7]=8;a[8]=9;a[9]=10;BiTree tree=new BiTree(a);// tree.Inorder(tree.nodeList.get(0));// tree.nonRecPostorder(tree.nodeList.get(0));System.out.println(tree.height(tree.nodeList.get(8)));}}
0 0
- java二叉树实现、遍历、求深度
- 剑指offer之求二叉树的深度(非递归的层次遍历)Java实现
- 二叉树创建、遍历、求深度--C语言实现
- 递归实现二叉树遍历以及求最大深度
- java 求二叉树深度
- 二叉树遍历方式和实现,以及二叉树查找、统计个数、比较、求深度
- C语言实现二叉树的基本操作---创建、遍历、求深度、求叶子结点
- C语言实现二叉树的基本操作---创建、遍历、求深度、求叶子结点
- 八.二叉树各种操作的C语言实现 深度遍历求深度,广度遍历求深度,交换左右子树,求叶子节点数
- C++ 实现求二叉树的深度及遍历(递归与非递归算法)
- 二叉树遍历及查找、统计个数、比较、求深度的递归实现
- 二叉树的遍历与求深度的递归与非递归实现
- [数据结构]二叉树遍历、求深度C语言的简单实现
- 二叉树求深度的实现
- 求二叉树的深度代码实现
- java 实现二叉树深度优先遍历的 前、中、后序遍历(递归)
- java实现二叉树的深度优先遍历和广度优先遍历
- java实现二叉树的建立,前中后序遍历,层次遍历,深度,节点个数等
- 八大算法之冒泡排序
- 1048. Find Coins (25)
- 尚硅谷Java基础笔记
- #多线程编程(一)
- java你可能不知道的事(2)--堆和栈
- java二叉树实现、遍历、求深度
- 【软件工程】开发项目重构的时机和方法
- 优化
- 《A Byte of Python》读书笔记
- git status的时候不再显示本地删除的文件状态
- 螺旋矩阵
- 大并发量,大数据量基于SSH应用程序架构有关问题
- 利用nginx搭建RTMP视频点播、直播、HLS服务器
- 用OC翻译并且添加注解的一些官方Demo