java实现二叉树的深度优先遍历和广度优先遍历
2015-10-12 22:32
726 查看
import java.util.ArrayDeque; public class BinaryTree { static class TreeNode{ int value; TreeNode left; TreeNode right; public TreeNode(int value){ this.value=value; } } TreeNode root; public BinaryTree(int[] array){ root=makeBinaryTreeByArray(array,1); } /** * 采用递归的方式创建一颗二叉树 * 传入的是二叉树的数组表示法 * 构造后是二叉树的二叉链表表示法 */ public static TreeNode makeBinaryTreeByArray(int[] array,int index){ if(index<array.length){ int value=array[index]; if(value!=0){ TreeNode t=new TreeNode(value); array[index]=0; t.left=makeBinaryTreeByArray(array,index*2); t.right=makeBinaryTreeByArray(array,index*2+1); return t; } } return null; } /** * 深度优先遍历,相当于先根遍历 * 采用非递归实现 * 需要辅助数据结构:栈 */ public void depthOrderTraversal(){ if(root==null){ System.out.println("empty tree"); return; } ArrayDeque<TreeNode> stack=new ArrayDeque<TreeNode>(); stack.push(root); while(stack.isEmpty()==false){ TreeNode node=stack.pop(); System.out.print(node.value+" "); if(node.right!=null){ stack.push(node.right); } if(node.left!=null){ stack.push(node.left); } } System.out.print("\n"); } /** * 广度优先遍历 * 采用非递归实现 * 需要辅助数据结构:队列 */ public void levelOrderTraversal(){ if(root==null){ System.out.println("empty tree"); return; } ArrayDeque<TreeNode> queue=new ArrayDeque<TreeNode>(); queue.add(root); while(queue.isEmpty()==false){ TreeNode node=queue.remove(); System.out.print(node.value+" "); if(node.left!=null){ queue.add(node.left); } if(node.right!=null){ queue.add(node.right); } } System.out.print("\n"); } /** * 13 * / \ * 65 5 * / \ \ * 97 25 37 * / /\ / * 22 4 28 32 */ public static void main(String[] args) { int[] arr={0,13,65,5,97,25,0,37,22,0,4,28,0,0,32,0}; BinaryTree tree=new BinaryTree(arr); tree.depthOrderTraversal(); tree.levelOrderTraversal(); } }
相关文章推荐
- Populating Next Right Pointers in Each Node (LeetCode)
- Populating Next Right Pointers in Each Node II (LeetCode)
- Leetcode - 广度优先遍历
- Leetcode - 广度优先算法专题
- 利用广度优先遍历BreadthFirstSearch (BFS)实现两个点之间是否连通
- 关于邻接表和其深度优先遍历、广度优先遍历的问题
- 从上往下打印二叉树
- LeetCode 19 Clone Graph
- LeetCode 25 Word Ladder II
- LeetCode 26 Word Ladder
- 一步一步学数据结构之n--n(图遍历--广度优先遍历)
- 数据结构 - 二叉树的遍历
- 数据结构 - 二叉树的广度优先遍历算法(C++)
- 数据结构 - 图的广度优先遍历(C++)
- 吝啬的国度--无向图,广度优先遍历,内存爆掉了
- 水池数目
- LeetCode | Binary Tree Level Order Traversal
- LeetCode | Binary Tree Level Order Traversal II
- 算法学习 - 图的广度优先遍历(BFS) (C++)
- top-10-algorithms-for-coding-interview 笔记