博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
(转)树的深度优先与广度优先遍历
阅读量:5809 次
发布时间:2019-06-18

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

原题出自百度的笔试:

 
简述树的深度优先及广度优先遍历算法,并说明非递归实现。

 

当时我看到这个题目的时候,已经完全记不得非递归算法该怎么实现了,后来查阅了一下,要用到两个辅助的数据结构:

深度优先遍历--->栈;

广度优先遍历--->队列;

这里以二叉树为例来实现。

import java.util.ArrayDeque;            public class BinaryTree {          static class TreeNode{              int value;              TreeNode left;              TreeNode right;                            public TreeNode(int value){                  this.value=value;              }          }                    TreeNode root;                    public BinaryTree(int[] array){              root=makeBinaryTreeByArray(array,1);          }                /**          * 采用递归的方式创建一颗二叉树          * 传入的是二叉树的数组表示法          * 构造后是二叉树的二叉链表表示法          */          public static TreeNode makeBinaryTreeByArray(int[] array,int index){              if(index
stack=new ArrayDeque
(); stack.push(root); while(stack.isEmpty()==false){ TreeNode node=stack.pop(); System.out.print(node.value+" "); if(node.right!=null){ stack.push(node.right); } if(node.left!=null){ stack.push(node.left); } } System.out.print("\n"); } /** * 广度优先遍历 * 采用非递归实现 * 需要辅助数据结构:队列 */ public void levelOrderTraversal(){ if(root==null){ System.out.println("empty tree"); return; } ArrayDeque
queue=new ArrayDeque
(); queue.add(root); while(queue.isEmpty()==false){ TreeNode node=queue.remove(); System.out.print(node.value+" "); if(node.left!=null){ queue.add(node.left); } if(node.right!=null){ queue.add(node.right); } } System.out.print("\n"); } /** * 13 * / \ * 65 5 * / \ \ * 97 25 37 * / /\ / * 22 4 28 32 */ public static void main(String[] args) { int[] arr={0,13,65,5,97,25,0,37,22,0,4,28,0,0,32,0}; BinaryTree tree=new BinaryTree(arr); tree.depthOrderTraversal(); tree.levelOrderTraversal(); } }

转载地址:http://tmcbx.baihongyu.com/

你可能感兴趣的文章
怀念回忆
查看>>
paramiko有密码和rsa方式无密码ssh、ftp
查看>>
J2SE之软件测试技术、单元测试以及日志管理器概念说明
查看>>
android DatabaseHelper
查看>>
Nginx+Redis+Ehcache:大型高并发与高可用的三层缓存架构总结
查看>>
JavaWeb系列:Servlet
查看>>
Python世界里的注释
查看>>
云MongoDB优化让LBS服务性能提升十倍
查看>>
PYTHON学习0004:数据类型----2019-6-4
查看>>
【unity实用技能】Unity画一条带箭头的线
查看>>
应用编排服务之ELK技术栈示例模板详解
查看>>
前后端分离框架介绍
查看>>
JVM-Class文件结构
查看>>
你可能学了假流程图,7步教你绘制知识点汇总流程图
查看>>
小米手机卖不动了?
查看>>
优秀的Mac网络性能监控工具——“PeakHour”
查看>>
圣杯布局和双飞翼布局
查看>>
https证书怎么配置?怎么进行https认证 ?
查看>>
线程安全和可重入函数的区别与联系
查看>>
Linux Apache SSL证书安装
查看>>