二叉树的建立与前、中、后、层次遍历
2011-09-19 17:06
267 查看
/* 2011-9-19 author:BearFly1990 */ package algorithm; import java.util.LinkedList; import java.util.Queue; public class BinaryTreeTraverse { public static void main(String[] args) { String tree = "1234567"; Node head = createBiTree(tree); preOrderTraverse(head); System.out.println(); inOrderTraverse(head); System.out.println(); postOrderTraverse(head); System.out.println(); LayerOrderTraverse(head); System.out.println(); } private static Node createBiTree(String str){ Queue<Node> parents = new LinkedList<Node>(); Queue<Node> children = new LinkedList<Node>(); for(int i = 0; i < str.length(); i++){ children.add(new Node(new Integer(str.charAt(i)-'0'))); } Node parent = children.poll(); parents.add(parent); while(!parents.isEmpty() && !children.isEmpty()){ Node tparent = parents.poll(); Node tleft = children.poll(); Node tright = children.poll(); tparent.setLeftChild(tleft); tparent.setRightChild(tright); parents.add(tleft); parents.add(tright); } return parent; } private static void LayerOrderTraverse(Node node) { Queue<Node> q = new LinkedList<Node>(); q.add(node); while(!q.isEmpty()){ Node temp = q.poll(); System.out.printf("%d ", temp.value); Node leftChild = temp.getLeftChild(); Node rightChild = temp.getRightChild(); if(leftChild != null)q.add(leftChild); if(rightChild != null)q.add(rightChild); } } private static void postOrderTraverse(Node node) { if( node == null)return; postOrderTraverse(node.getLeftChild()); postOrderTraverse(node.getRightChild()); System.out.printf("%d ",node.getValue()); } private static void inOrderTraverse(Node node) { if(node == null){ return; } inOrderTraverse(node.getLeftChild()); System.out.printf("%d ",node.getValue()); inOrderTraverse(node.getRightChild()); } private static void preOrderTraverse(Node node) { if(node == null){ return; } System.out.printf("%d ",node.getValue()); preOrderTraverse(node.getLeftChild()); preOrderTraverse(node.getRightChild()); } private static class Node{ private Integer value; private Node leftChild; private Node rightChild; public Node(Integer value) { this.value = value; } public Integer getValue() { return value; } public void setValue(Integer value) { this.value = value; } public Node getLeftChild() { return leftChild; } public void setLeftChild(Node leftChild) { this.leftChild = leftChild; } public Node getRightChild() { return rightChild; } public void setRightChild(Node rightChild) { this.rightChild = rightChild; } } }
相关文章推荐
- 树的遍历 有后序遍历和中序遍历建立二叉树,并输出层次遍历
- 通过前序(后序), 中序遍历建立二叉树 求解层次遍历
- java根据层次遍历建立二叉树
- 一步一步复习数据结构和算法基础-层次建立层次遍历二叉树
- 二叉树的建立和基础操作<二> —— (层次遍历和计算二叉树的宽度)
- UVa 122 Trees on the level(链式二叉树的建立和层次遍历)
- 二叉树建立 ---层次遍历方式
- 二叉树先序后序递归建立,前中后序层次非递归遍历,以及统计叶子结点个数以及树的深度
- 建立二叉树,并层次遍历输出
- 二叉树采用二叉链表结构表示。设计并实现如下算法:输入某棵二叉树的广义表形式,建立该二叉树,并按层次遍历该二叉树。
- 建立平衡二叉树+层次遍历
- 数据结构二叉树——建立二叉树、中序递归遍历、非递归遍历、层次遍历
- 面试题:二叉树的层次遍历,包括定制树的建立
- 二叉树建立以及先序、中序、后序、层次遍历(JAVA 实现)
- 建立二叉树,按层次遍历分层次换行输出
- 二叉树的建立及遍历(先序遍历、中序遍历、后续遍历、层次遍历)
- 二叉树的建立&&前中后遍历(递归实现)&&层次遍历
- 二叉树的层次遍历、哈夫曼树及哈夫曼编码的建立
- 二叉树的建立、遍历、深度、高度及层次遍历
- python实现二叉树的建立以及遍历(递归前序、中序、后序遍历,队栈前序、中序、后序、层次遍历)