码迷,mamicode.com
首页 > 其他好文 > 详细

树的深度优先遍历和广度优先遍历

时间:2014-10-20 23:15:40      阅读:277      评论:0      收藏:0      [点我收藏+]

标签:style   blog   color   ar   java   sp   数据   div   log   

  1 import java.util.ArrayDeque;
  2 
  3 public class BinaryTree {
  4     static class TreeNode{
  5         int value;
  6         TreeNode left;
  7         TreeNode right;
  8 
  9         public TreeNode(int value){
 10             this.value=value;
 11         }
 12     }
 13 
 14     TreeNode root;
 15 
 16     public BinaryTree(int[] array){
 17         root=makeBinaryTreeByArray(array,1);
 18     }
 19 
 20     /**
 21      * 采用递归的方式创建一颗二叉树
 22      * 传入的是二叉树的数组表示法
 23      * 构造后是二叉树的二叉链表表示法
 24      */
 25     public static TreeNode makeBinaryTreeByArray(int[] array,int index){
 26         if(index<array.length){
 27             int value=array[index];
 28             if(value!=0){
 29                 TreeNode t=new TreeNode(value);
 30                 array[index]=0;
 31                 t.left=makeBinaryTreeByArray(array,index*2);
 32                 t.right=makeBinaryTreeByArray(array,index*2+1);
 33                 return t;
 34             }
 35         }
 36         return null;
 37     }
 38 
 39     /**
 40      * 深度优先遍历,相当于先根遍历
 41      * 采用非递归实现
 42      * 需要辅助数据结构:栈
 43      */
 44     public void depthOrderTraversal(){
 45         if(root==null){
 46             System.out.println("empty tree");
 47             return;
 48         }       
 49         ArrayDeque<TreeNode> stack=new ArrayDeque<TreeNode>();
 50         stack.push(root);       
 51         while(stack.isEmpty()==false){
 52             TreeNode node=stack.pop();
 53             System.out.print(node.value+"    ");
 54             if(node.right!=null){
 55                 stack.push(node.right);
 56             }
 57             if(node.left!=null){
 58                 stack.push(node.left);
 59             }           
 60         }
 61         System.out.print("\n");
 62     }
 63 
 64     /**
 65      * 广度优先遍历
 66      * 采用非递归实现
 67      * 需要辅助数据结构:队列
 68      */
 69     public void levelOrderTraversal(){
 70         if(root==null){
 71             System.out.println("empty tree");
 72             return;
 73         }
 74         ArrayDeque<TreeNode> queue=new ArrayDeque<TreeNode>();
 75         queue.add(root);
 76         while(queue.isEmpty()==false){
 77             TreeNode node=queue.remove();
 78             System.out.print(node.value+"    ");
 79             if(node.left!=null){
 80                 queue.add(node.left);
 81             }
 82             if(node.right!=null){
 83                 queue.add(node.right);
 84             }
 85         }
 86         System.out.print("\n");
 87     }
 88 
 89     /** 
 90      *                  13
 91      *                 /   92      *               65    5
 93      *              /  \     94      *             97  25   37
 95      *            /    /\   /
 96      *           22   4 28 32
 97      */
 98     public static void main(String[] args) {
 99         int[] arr={0,13,65,5,97,25,0,37,22,0,4,28,0,0,32,0};
100         BinaryTree tree=new BinaryTree(arr);
101         tree.depthOrderTraversal();
102         tree.levelOrderTraversal();
103     }
104 }

 

 

树的深度优先遍历和广度优先遍历

标签:style   blog   color   ar   java   sp   数据   div   log   

原文地址:http://www.cnblogs.com/bug-butterfly/p/4038823.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!