Java实现二叉树的基本操作
来源:互联网 发布:如何评价那英 知乎 编辑:程序博客网 时间:2024/04/29 21:13
更多例题:http://blog.csdn.net/lhfight/article/details/7789527
package D0726;import java.util.ArrayDeque;import java.util.Queue;public class TestTree {public static void main(String[] args) {// 测试TreenodeTreenode 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 leafNum(node.lChild)+leafNum(node.rChild);}}class Treenode {public String data;public Treenode lChild;public Treenode rChild;// 构造函数public Treenode(String data) {this.data = data;this.lChild = null;this.rChild = null;}}
- Java实现二叉树的基本操作
- Java实现二叉树的基本操作
- JAVA实现二叉树的基本操作
- 数据结构:二叉树的基本操作(JAVA实现)
- 二叉树基本操作--java实现
- 二叉树基本操作—Java实现
- java实现二叉树基本操作
- Java实现二叉树基本操作
- 二叉树之Java实现二叉树基本操作
- 二叉树基本操作的程序实现
- 二叉树基本操作的程序实现
- 二叉树基本操作的程序实现
- 二叉树的基本操作-递归实现
- 二叉树的基本操作实现
- 二叉树的基本操作实现
- C++实现二叉树的基本操作
- 二叉树的基本操作实现
- java二叉查找树的基本操作
- C# hide sip
- spring beans
- 使用GLUT for win32 学习openGL
- DG日常维护SQL
- C语言复习之冒泡法
- Java实现二叉树的基本操作
- 关于synthetic标记
- JAVA基础学习(8)
- 注册登录过程点滴(二):使用MVC Remote验证的注意点
- linux 查看端口占用进程ID
- 小心服务器内存居高不下的元凶----WebAPI服务
- Win32汇编--通用控件 Progress Bar 的使用
- 关于class$java$lang$Character
- java procedure streamingserver.naming-sql.xml