博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
二叉树的先序创建,先序,中序,后序的递归与非递归遍历,层次遍历,叶子结点数及树的深度...
阅读量:5147 次
发布时间:2019-06-13

本文共 3346 字,大约阅读时间需要 11 分钟。

二叉树的先序创建,先序,中序,后序的递归与非递归遍历,层次遍历,叶子结点数及树的深度计算

输入格式:如   abd###ce##f##*

 

package tree;//二叉树的二叉链表实现import java.util.LinkedList;import java.util.Queue;import java.util.Scanner;import java.util.Stack;public class BTree
{ BTNode rootNode=new BTNode(); class BTNode
{ char data; BTNode
leftChildNode; BTNode
rightChildNode; public BTNode(){ data=0; leftChildNode=rightChildNode=null; } public BTNode(char data){ this.data=data; leftChildNode=rightChildNode=null; } public BTNode(char data,BTNode leftChildNode,BTNode rightChildNode){ this.data=data; leftChildNode=leftChildNode; rightChildNode=rightChildNode; } } //先序创建二叉树 char d[]=new char[100]; int i=0; public BTNode creatBTree(){ BTNode node=null; if(d[i]!='*'){ if(d[i]=='#'){ node=null; i++; } else{ node=new BTNode(d[i]); i++; node.leftChildNode=creatBTree(); node.rightChildNode=creatBTree(); } } return node; } //先序递归遍历 public void preOrder(BTNode
t){ if(t!=null){ System.out.print(t.data); preOrder(t.leftChildNode); preOrder(t.rightChildNode); } } //先序非递归遍历 public void preStackOrder(BTNode t){ Stack s=new Stack(); BTNode p=t; while(p!=null&&s.isEmpty()!=true){ if(p!=null){ System.out.print(p.data); s.push(p); p=p.leftChildNode; } if(s.isEmpty()){ s.pop(); p=p.rightChildNode; } } } //中序递归遍历 public void inOrder(BTNode t){ if(t!=null){ inOrder(t.leftChildNode); System.out.print(t.data); inOrder(t.rightChildNode); } } //中序非递归遍历 public void inStackOrder(BTNode t){ Stack
s=new Stack
(); BTNode p=t; while(p!=null&&s.isEmpty()){ if(p!=null){ s.push(p); p=p.leftChildNode; } if(s.isEmpty()!=true){ p=s.pop(); System.out.print(p.data); p=p.rightChildNode; } } } //后序递归遍历 public void postOrder(BTNode t){ if(t!=null){ postOrder(t.leftChildNode); postOrder(t.rightChildNode); System.out.print(t.data); } } //后序非递归遍历 public void postStackOrder(BTNode t){ Stack
s=new Stack
(); Stack
ss=new Stack
(); Integer i=new Integer(1); BTNode p=t; BTNode q=t; while(p!=null||s.isEmpty()!=true){ while(p!=null){ s.push(p); ss.push(new Integer(0)); p=p.leftChildNode; } while(s.isEmpty()!=true&&ss.peek().equals(i)){ ss.pop(); q=s.pop(); System.out.print(q.data); } if(s.isEmpty()!=true){ ss.pop(); ss.push(i); p=s.peek(); p=p.rightChildNode; } } } //层次非递归遍历 public void levelQueueOrder(BTNode t){ Queue
q=new LinkedList
(); q.add(t); while(q.isEmpty()!=true){ BTNode step=q.remove(); System.out.print(step.data); if(step.leftChildNode!=null){ q.add(step.leftChildNode); } if(step.rightChildNode!=null){ q.add(step.rightChildNode); } } } //计算二叉树深度 public int depth(BTNode t){ int leftDepth,rightDepth; if(t==null) return 0; leftDepth=depth(t.leftChildNode); rightDepth=depth(t.rightChildNode); return Math.max(leftDepth,rightDepth)+1; } //叶子结点个数 int num=0; public int leaf(BTNode t){ if(t!=null){ if(t.leftChildNode==null&&t.rightChildNode==null) num++; leaf(t.leftChildNode); leaf(t.rightChildNode); } return num; } public static void main(String[] args) { BTree bt=new BTree(); Scanner sc=new Scanner(System.in); String a=sc.next(); char c[]=a.toCharArray(); for(int i=0;i

转载于:https://www.cnblogs.com/oversea201405/p/3752253.html

你可能感兴趣的文章
淘宝JAVA中间件Diamond详解(一)---简介&快速使用
查看>>
一种简单的数据库性能测试方法
查看>>
如何给JavaScript文件传递参数
查看>>
Hadoop HBase概念学习系列之HBase里的宽表设计概念(表设计)(二十七)
查看>>
Kettle学习系列之Kettle能做什么?(三)
查看>>
电脑没有安装iis,但是安装了.NET环境,如何调试网站发布的程序
查看>>
【Mac + GitHub】之在另一台Mac电脑上下载GitHub的SSH链接报错
查看>>
Day03:Selenium,BeautifulSoup4
查看>>
awk变量
查看>>
mysql_对于DQL 的简单举例
查看>>
postgis几何操作函数集
查看>>
35. Search Insert Position(C++)
查看>>
[毕业生的商业软件开发之路]C#异常处理
查看>>
一些php文件函数
查看>>
std::min error C2059: 语法错误:“::” 的解决方法
查看>>
Opencv保存摄像头视频&&各种编码器下视频文件占用空间对比
查看>>
「图形学」直线扫描——Bresenham算法改进了中点Bresenham算法?
查看>>
jQuery 给div绑定单击事件
查看>>
Exceptionless 生产部署笔记
查看>>
有关快速幂取模
查看>>