zoukankan      html  css  js  c++  java
  • 树的深度优先遍历和广度优先遍历

      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("
    ");
     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("
    ");
     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 }
     
  • 相关阅读:
    【风马一族_php】PHP与Mysql建立连接
    【风马一族_php】NO1_用php发出一声 Hi
    【风马一族_php】NO0_搭建web服务器
    【风马一族_mysql】mysql基本指令
    wnmp环境搭建
    appach2.4 + php7 +mysql5.7.14 配置
    常用样式
    jquery 格式化系统时间
    使用插件实现一般处理程序导出excel
    bootstrap分页
  • 原文地址:https://www.cnblogs.com/bug-butterfly/p/4038823.html
Copyright © 2011-2022 走看看