Java实现二叉树的前序、中序、后序以及层次遍历
来源:互联网 发布:mac升级中解压软件损坏 编辑:程序博客网 时间:2024/05/16 11:47
建立一颗二叉排序树,并输出它的前序、中序、后序以及层次遍历结
输入:
56 9 1 5 8输出:6 1 5 9 8 //前序1 5 6 8 9 //中序5 1 8 9 6 //后序6 1 9 5 8 //层次
//Main函数
public static void main(String[] args){
Scanner scanner = new Scanner(System.in);
while(scanner.hasNextInt()){
int num = scanner.nextInt();
int[] array = new int[num];
for(int i = 0; i < num; i++){
array[i] = scanner.nextInt();
}
TreeNode root = new TreeNode(array[0]);
for(int i = 1; i < num; i++){
buildBST(root,array[i]);
}
DLR(root);//前序遍历
System.out.println();
LDR(root);//中序遍历
System.out.println();
LRD(root);//后序遍历
System.out.println();
levelOrder(root);//层次遍历
System.out.println();
}
}
//前序遍历非递归
public static void DLR(TreeNode node){
if(node!=null){
Stack<TreeNode> stack = new Stack<TreeNode>();
stack.push(node);
while(!stack.isEmpty()){
node = stack.pop();
System.out.print(node.val+" ");
if(node.right!=null)stack.push(node.right);
if(node.left!=null)stack.push(node.left);
}
}
}
//中序遍历非递归
public static void LDR(TreeNode node){
Stack<TreeNode> stack = new Stack<TreeNode>();
while(node!=null || !stack.isEmpty()){
if(node!=null){
stack.push(node);
node = node.left;
}else{
node = stack.pop();
System.out.print(node.val+" ");
node = node.right;
}
}
}
//后序遍历非递归
public static void LRD(TreeNode node){
Stack<TreeNode> stack = new Stack<TreeNode>();
TreeNode pre = node;
while(node!=null){
while(node.left!=null){
stack.push(node);
node = node.left;
}
while(node!=null && (node.right==null || node.right==pre)){
System.out.print(node.val+" ");
pre = node;
if(stack.isEmpty()) return;
node = stack.pop();
}
stack.push(node);
node = node.right;
}
}
//层次遍历非递归
public static void levelOrder(TreeNode node){
Queue<TreeNode> queue = new LinkedBlockingQueue<TreeNode>();
queue.offer(node);
while(!queue.isEmpty()){
node = queue.poll();
System.out.print(node.val+" ");
if(node.left!=null)queue.add(node.left);
if(node.right!=null)queue.add(node.right);
}
}
//构建二叉排序树
public static void buildBST(TreeNode node,int val){
if(node.val == val) return ;
if(val < node.val){
if(node.left==null) node.left = new TreeNode(val);
else buildBST(node.left,val);
}else{
if(node.right==null) node.right = new TreeNode(val);
else buildBST(node.right,val);
}
}
//二叉树节点结构
class TreeNode{
int val = 0;
TreeNode left = null;
TreeNode right = null;
public TreeNode(int val){
this.val = val;
}
}```
- Java实现二叉树的前序、中序、后序以及层次遍历
- 二叉树的非递归遍历以及层次遍历(前序、中序、后序)
- java语言实现二叉树的前序、中序与后序遍历(递归与非递归) 层次遍历
- JAVA实现二叉树的前、中、后序遍历
- Java二叉树(一)--定义及前序、中序、后序、层次遍历及求高度的实现
- 二叉树建立以及先序、中序、后序、层次遍历(JAVA 实现)
- 二叉树:前序、中序、后序、层次遍历及实现
- 数据结构 二叉树遍历之前序、中序、后序以及层次遍历实现
- 二叉树--前序遍历、中序遍历、后序遍历、层次遍历
- 树的遍历实现,前序遍历,中序遍历,后序遍历以及层次遍历的迭代与递归实现
- 通过前序遍历和中序遍历重建二叉树以及输出后序遍历(Java实现)
- 二叉树的前序、中序、后序及层次遍历的递归与非递归源码实现
- 二叉树的前序、中序、后序、层次遍历的递归与非递归实现
- java编写二叉树以及前序遍历、中序遍历和后序遍历
- java编写二叉树以及前序遍历、中序遍历和后序遍历
- 二叉树的遍历问题-----Java实现(中序、前序、后序、遍历)
- 二叉树的4种遍历方式(前序、中序、后序、层次)Java版
- java 实现二叉树深度优先遍历的 前、中、后序遍历(递归)
- 软件工程(C编码实践篇)实验一
- 剑指Offer--5.用两个栈实现队列
- 剑指offer之一---二维数组中的查找
- 垃圾收集算法对比
- POJ 1743:后缀数组求 不重叠最长重复子串
- Java实现二叉树的前序、中序、后序以及层次遍历
- Node中http模块详解(服务端篇)
- 变量名命名
- 大数据预科班9
- 【Unity3D】导入FBX模型使用Legacy动画的Scale缩放问题
- gcc编译流程&存储布局&位运算
- 逻辑回归与梯度下降
- 面试系列-HashTable与HashMap的区别
- 3. Longest Substring Without Repeating Characters