浏览 2832 次
精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (0)
|
|
---|---|
作者 | 正文 |
发表时间:2009-08-11
最后修改:2010-01-09
1.此篇文章,仅作为《数据结构与算法分析》第四章--树 中的二叉树一节的读书笔记,发出来供大家共同学习。
2.在开始之前,极力向大家推荐Google Docs. 并非做广告,而是google的产品,不得不让人喜欢。 本文中的插图就是用google docs中的编辑器画的。 很好用。 大家可以试一试
3.本文使用图片方式记录,结合图片与文字,能更加容易理解。 文中涉及到 后缀表达式,关于此方面的内容,可以参考我之前的读书笔记 -- 数据结构与算法分析 读书笔记 --栈的应用
4.最后附上,本文中示例。 树表达式的简单实现代码, 由于数据结构整处于学习中,难免代码丑陋,请更位牛人拍砖,赐教。
关于树的一些基本概念的图片(虽丑陋,但是本人一笔笔画的):
package com.base.tree; import java.util.Stack; public class MyTreeTest { public static void main(String[] args) { MyStack mystack=new MyStack(); MyTree tree=mystack.postfixhandler("ab+cde+**"); MyTree.preorder(tree);//先序输出 } } class MyTree { private String data; private MyTree left; private MyTree right; public MyTree(String data) { this.data = data; } public void setLeft(MyTree left) { this.left = left; } public void setRight(MyTree right) { this.right = right; } public MyTree getLeft() { return left; } public MyTree getRight() { return right; } public String getData() { return data; } /** * 先序遍历 左-中-右 */ public static void preorder(MyTree tree){ if(tree==null)return; System.out.println(tree.getData()); preorder(tree.getLeft()); preorder(tree.getRight()); } /** * 后序遍历 左-右-中(data) */ public static void postorder(MyTree tree){ if(tree==null)return; postorder(tree.getLeft()); postorder(tree.getRight()); System.out.println(tree.getData()); } /** * 中序遍历 左-中-右 */ public static void inorder(MyTree tree){ if(tree==null)return; postorder(tree.getRight()); System.out.println(tree.getData()); postorder(tree.getLeft()); } } class MyStack { /** * 后缀表达式处理方法 * * @param postfix */ public MyTree postfixhandler(String str) { Stack<MyTree> result = new Stack<MyTree>();// 栈对象 for (int i = 0; i < str.length(); i++) { // 是否为运算符 if ("+-*/".indexOf(str.charAt(i) + "") == -1) { result.push(new MyTree(str.charAt(i) + "")); } else { // 栈为空,则无法后续操作 if (!result.isEmpty()) { // 将之前的树出栈,构造新的树,并入栈操作 MyTree root = new MyTree(str.charAt(i) + ""); root.setRight(result.pop()); root.setLeft(result.pop()); result.push(root); } } } return result.pop(); } }
最后输出结果:
* + a b * c + d e 声明:ITeye文章版权属于作者,受法律保护。没有作者书面许可不得转载。
推荐链接
|
|
返回顶楼 | |