搜文章
推荐 原创 视频 Java开发 iOS开发 前端开发 JavaScript开发 Android开发 PHP开发 数据库 开发工具 Python开发 Kotlin开发 Ruby开发 .NET开发 服务器运维 开放平台 架构师 大数据 云计算 人工智能 开发语言 其它开发
Lambda在线 > 架构师成长 > 二叉树深度优先遍历

二叉树深度优先遍历

架构师成长 2020-06-15

遍历方式

二叉树深度优先遍历方式有先序遍历、中序遍历、后序遍历。


假设树形结构如下:

深度优先遍历实现

import java.util.ArrayList;import java.util.List;
public class BinaryTreeTraverse {
static class BinTree { public BinTree left; public BinTree right; public BinTree root; // 数据域 private Object data; // 存节点 public List<BinTree> datas;
public BinTree(BinTree left, BinTree right, Object data) { this.left = left; this.right = right; this.data = data; }
// 将初始的左右孩子值为空 public BinTree(Object data) { this(null, null, data); }
public BinTree() {        }
public void createTree(Object[] objs) { datas = new ArrayList<BinTree>(); // 将一个数组的值依次转换为Node节点 for (Object o : objs) { datas.add(new BinTree(o)); } // 第一个数为根节点 root = datas.get(0); // 建立二叉树 for (int i = 0; i < objs.length / 2; i++) { //左孩子 datas.get(i).left = datas.get(i * 2 + 1); // 右孩子 if (i * 2 + 2 < datas.size()) {//避免偶数的时候 下标越界 datas.get(i).right = datas.get(i * 2 + 2); } } }
//先序遍历 public void preOrder(BinTree root) {
if (root != null) { System.out.print(root.data + " "); preOrder(root.left); preOrder(root.right); } }
//中序遍历 public void inOrder(BinTree root) {
if (root != null) { inOrder(root.left); System.out.print(root.data+ " "); inOrder(root.right); } }
//后序遍历 public void afterOrder(BinTree root) {
if (root != null) { afterOrder(root.left); afterOrder(root.right); System.out.print(root.data+ " "); } }
}
public static void main(String[] args) { BinTree BinTree = new BinTree(); Object[] a = {0,1, 2, 3, 4, 5, 6}; BinTree.createTree(a);
System.out.print("先序遍历:"); BinTree.preOrder(BinTree.root); System.out.println();
System.out.print("中序遍历:"); BinTree.inOrder(BinTree.root); System.out.println();
System.out.print("后序遍历:"); BinTree.afterOrder(BinTree.root); }
}

实现结果:

先序遍历:0 1 3 4 2 5 6 中序遍历:3 1 4 0 5 2 6 后序遍历:3 4 1 5 6 2 0


版权声明:本站内容全部来自于腾讯微信公众号,属第三方自助推荐收录。《二叉树深度优先遍历》的版权归原作者「架构师成长」所有,文章言论观点不代表Lambda在线的观点, Lambda在线不承担任何法律责任。如需删除可联系QQ:516101458

文章来源: 阅读原文

相关阅读

关注架构师成长微信公众号

架构师成长微信公众号:HelloCTO

架构师成长

手机扫描上方二维码即可关注架构师成长微信公众号

架构师成长最新文章

精品公众号随机推荐

上一篇 >>

Scala学习一