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);
	}
}

效果:


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

二叉树的三种遍历方式java实现

二叉树的定义 二叉树(binary tree)是结点的有限集合,这个集合或者空,或者由一个根及两个互不相交的称为这个根的左子树或右子树构成. 从定义可以看出,二叉树包括:1.空树 2.只有...
  • GFJ0814
  • GFJ0814
  • 2016年06月11日 19:24
  • 9642

JAVA下实现二叉树的先序、中序、后序、层序遍历(递归和循环)

import java.util.HashMap; import java.util.LinkedList; import java.util.Map; import java.util.Queue;...
  • kerryfish
  • kerryfish
  • 2014年04月22日 15:07
  • 21580

java使用递归,非递归方式实现二叉树的三种常见遍历方式

二叉树的定义: 二叉树(binary tree)是结点的有限集合,这个集合或者空,或者由一个根及两个互不相交的称为这个根的左子树或右子树构成. 从定义可以看出,二叉树包括:1.空树 2.只有一...
  • lr131425
  • lr131425
  • 2017年03月07日 10:48
  • 2278

二叉树遍历——前中后序

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

java实现二叉树遍历demo

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

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

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

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

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

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

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

二叉树遍历:递归方法与非递归方法——递归程序修改为非递归的方法

前天去美团面试,二面基本一路顺风,后来,碰到一个用非递归的方法求解二叉树高度,并要求现场写程序,一下就卡住了,非常不爽。这两天把这个部分恶补了一下,总结了一下思路如下。 1、考虑清楚解题类似于遍历中...
  • xiongjinshui
  • xiongjinshui
  • 2012年10月24日 21:23
  • 331

第九周——项目三—用二叉树遍历思想解决问题

/* * Copyright (c) 2017,烟台大学计算机学院 * All right reserved. * 文件名称:btree *...
  • yinna_csdn_cc
  • yinna_csdn_cc
  • 2017年10月31日 20:33
  • 59
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:java——二叉树遍历
举报原因:
原因补充:

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