二叉树建立及其遍历模板
2012-07-30 15:00
162 查看
package Template; import java.util.ArrayDeque; import java.util.Queue; public class Tree { public static void main(String[] args) { // 测试Treenode Treenode node = buildTree(null, 1); System.out.print("先序遍历:"); preOrder(node); System.out.println(); System.out.print("中序遍历:"); inOrder(node); System.out.println(); System.out.print("后序遍历:"); postOrder(node); System.out.println(); System.out.print("层次遍历:"); levelOrder(node); System.out.println(); System.out.print("叶子节点数目:"); System.out.println(leafNum(node)); System.out.print("二叉树的深度:"); System.out.println(deep(node)); } // 建立树@k用来控制树的深度 static char i = 'a';// 节点 public static Treenode buildTree(Treenode node, int k) { if (k > 4) return null; if (node == null) { node = new Treenode(" " + i++); } node.lChild = buildTree(node.lChild, k + 1); node.rChild = buildTree(node.rChild, k + 1); return node; } // 根据先序和中序来构建二叉树 public Treenode buildTree(String pre, String in) { if (pre.length() <= 0) return null; Treenode root = new Treenode(pre.charAt(0) + ""); // 以根节点为中心,将中序分为两个子序列 String leftin = ""; String rightin = ""; // 根所左中序的长度,将先序分为左右两个子先序 String leftpre = ""; String rightpre = ""; root.lChild = buildTree(leftpre, leftin); root.rChild = buildTree(rightpre, rightin); return root; } // 先序遍历 public static void preOrder(Treenode node) { if (node != null) { System.out.print(node.data); preOrder(node.lChild); preOrder(node.rChild); } } // 中序遍历 public static void inOrder(Treenode node) { if (node != null) { inOrder(node.lChild); System.out.print(node.data); inOrder(node.rChild); } } // 后序遍历 public static void postOrder(Treenode node) { if (node != null) { postOrder(node.lChild); postOrder(node.rChild); System.out.print(node.data); } } // 层次遍历 public static void levelOrder(Treenode node) { if (node == null) return; Queue<Treenode> queue = new ArrayDeque<Treenode>(); queue.add(node); while (!queue.isEmpty()) { Treenode temp = queue.poll(); System.out.print(temp.data); if (temp.lChild != null) queue.add(temp.lChild); if (temp.rChild != null) queue.add(temp.rChild); } } // 求树的叶子节点数 public static int leafNum(Treenode node) { if (node != null) { if (node.lChild == null && node.rChild == null) { return 1; } return leafNum(node.lChild)+leafNum(node.rChild); } return 0; } //求二叉树的深度 public static int deep(Treenode node){ if(node == null)return 0; if(node.lChild==null&&node.rChild==null)return 1; return Math.max(deep(node.lChild), deep(node.rChild))+1; } } class Treenode { public String data; public Treenode lChild; public Treenode rChild; // 构造函数 public Treenode(String data) { this.data = data; this.lChild = null; this.rChild = null; } }
相关文章推荐
- 树根据扩展先序遍历建立二叉树及其非递归遍历
- [算法与数据结构] - No.7 二叉树建立及其前序、中序、后序遍历
- 二叉树的建立与遍历【模板】
- 二叉树的建立(先序输入)与遍历输出模板
- 模板_二叉树建立与遍历
- 二叉树 建立二叉树 二叉树先、中、后序遍历 计算叶结点数 、树的深度
- 二叉树的建立与遍历(递推)
- c++二叉树的非递归建立和遍历
- SDUT 216 数据结构实验之二叉树的建立与遍历
- 二叉树的建立和遍历
- 根据前序遍历和后续遍历建立二叉树
- 数据结构试验-试验7二叉树的建立与遍历
- 二叉树的建立与遍历
- 二叉树(BinaryTree)的建立和遍历
- 数据结构实验之二叉树的建立与遍历
- 二叉树的建立和遍历
- 【暂无】 二叉树 根据遍历结果建立二叉树(build-tree.cpp)
- 二叉树的建立与三种遍历
- java建立二叉树,递归/非递归先序遍历,递归/非递归中序遍历,层次遍历
- 2136-->数据结构实验之二叉树的建立与遍历