java——二叉树遍历

原创 2015年07月08日 17:25:08

今天遇到一个面试题,构建一个二叉树,并分别打印四个分支。




import java.util.LinkedList;
import java.util.List;

public class BinaryTree {
	private String[] array = { "A", "B", "C", "D", "E", "F", "G" };
	private static List<Node> nodeList = null;

	private static class Node {
		Node leftChild;
		Node rightChild;
		String data;

		Node(String newData) {
			leftChild = null;
			rightChild = null;
			data = newData;
		}
	}

	public void createBinTree() {
		nodeList = new LinkedList<Node>();
		for (int i = 0; i < array.length; i++) {
			nodeList.add(new Node(array[i]));
		}
		for (int parentIndex = 0; parentIndex < array.length / 2 - 1; parentIndex++) {
			// 左
			nodeList.get(parentIndex).leftChild = nodeList
					.get(parentIndex * 2 + 1);
			// 右
			nodeList.get(parentIndex).rightChild = nodeList
					.get(parentIndex * 2 + 2);
		}
		//last父节点
		int lastParentIndex = array.length / 2 - 1;
		//这里可以加判断,因为这里只有7个所以直接写了。
		nodeList.get(lastParentIndex).leftChild = nodeList.get(lastParentIndex * 2 + 1);
		nodeList.get(lastParentIndex).rightChild = nodeList.get(lastParentIndex * 2 + 2);
	}

	/**
	 * 遍历
	 */
	public static void post1(Node root) {
		if (root == null)
			return;
		System.out.print(root.data);
		post1(root.leftChild);
	}

	public static void post3(Node root) {
		if (root == null)
			return;
		System.out.print(root.data);
		post2(root.rightChild);
	}

	public static void post2(Node root) {
		if (root == null)
			return;
		System.out.print(root.data);
		post3(root.leftChild);
	}

	public static void post4(Node root) {
		if (root == null)
			return;
		System.out.print(root.data);
		post4(root.rightChild);
	}

	public static void main(String args[]) {
		BinaryTree tree = new BinaryTree();
		tree.createBinTree();
		Node root = nodeList.get(0);
		// 输出
		post1(root);
		System.out.println();
		post2(root);
		System.out.println();
		post3(root);
		System.out.println();
		post4(root);
	}
}

效果:


版权声明:本文为博主原创文章,未经博主允许不得转载。

相关文章推荐

二叉树遍历——前中后序

  • 2016年07月18日 09:38
  • 906KB
  • 下载

java实现二叉树遍历demo

  • 2014年07月18日 16:25
  • 4KB
  • 下载

数据结构与算法学习笔记——二叉树遍历(二)(Morris Traversal)

前面介绍了一般的二叉树遍历方法,包括递归和迭代。这两种方法的空间复杂度都是O(n)。 二叉树遍历的另外一种方法:Morris遍历二叉树 的空间复杂度为O(1),并且还不改变原本的树结构,时间复杂度依...

【二叉树遍历算法】——前/中/后序递归与非递归的实现

昨天面试了美团,面试官要求写出二叉树的中序遍历,要求实现递归与非递归方式。在写非递归的时候,一个while循环中忘记控制空指针,╮(╯▽╰)╭当时脑子一片空白不在状态。回来后告诉自己,这类问题以后绝不...

数据结构与算法学习笔记——二叉树遍历(一)(递归、迭代)

最近学习二叉树相关的内容,个人认为其中最重要的应该就是二叉树的遍历了,包括先序,中序,后续。通常二叉树的遍历有三种方法:递归、迭代和Morris遍历。递归应该是最容易理解了, Morris遍历最难理解...

数据结构例程——二叉树遍历的递归算法

本文是数据结构基础系列(6):树和二叉树中第10课时二叉树的遍历的例程。【二叉树遍历的递归算法】   实现二叉树的先序、中序、后序遍历的递归算法,并对用”A(B(D,E(H(J,K(L,M(,N))...

数据结构例程——用二叉树遍历思想解决问题

本文是数据结构基础系列(6):树和二叉树中第10课时二叉树的遍历的例程。【利用二叉树遍历思想解决问题】(请利用二叉树算法库)   假设二叉树采用二叉链存储结构存储,分别实现以下算法,并在程序中完成测...

数据结构例程——二叉树遍历的非递归算法

本文是数据结构基础系列(6):树和二叉树中第11课时二叉树遍历非递归算法的例程。【二叉树遍历的非递归算法】 实现二叉树的先序、中序、后序遍历的非递归算法,并对用”A(B(D,E(H(J,K(L,M(...

二叉树遍历——BFS

题目见刘汝佳101,闲来无事自己敲敲,很好的模板#define maxn 300 #include #include #include struct node { int hav;//是否访...

【树项目3 - 利用二叉树遍历思想解决问题——第10周】

用二叉树遍历思想解决问题  二叉树算法库请关注博客xjp #ifndef BTREE_H_INCLUDED #define BTREE_H_INCLUDED /* * Copyright (c) 2...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:java——二叉树遍历
举报原因:
原因补充:

(最多只允许输入30个字)