首页 > 代码库 > 树的深度优先遍历和广度优先遍历
树的深度优先遍历和广度优先遍历
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=http://www.mamicode.com/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=http://www.mamicode.com/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 }
树的深度优先遍历和广度优先遍历
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。