二叉树深度优先遍历

Posted 架构师成长

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了二叉树深度优先遍历相关的知识,希望对你有一定的参考价值。

遍历方式

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


假设树形结构如下:

深度优先遍历实现

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


以上是关于二叉树深度优先遍历的主要内容,如果未能解决你的问题,请参考以下文章

写写代码系列028:二叉树的深度优先遍历

Python算法系列—深度优先遍历算法

树二叉树遍历算法(深度优先广度优先遍历,前序中序后序层次)及Java实现

二叉树深度优先遍历解题思路

讲透学烂二叉树:二叉树的遍历图解算法步骤及JS代码

Python二叉树的三种深度优先遍历