二叉树的结构分析及实现
来源:互联网 发布:淘宝下载到桌面 编辑:程序博客网 时间:2024/06/05 16:31
二叉树的定义:
二叉树是每个节点最多只有两个字数的树结构,在图的定义中二叉树是一个连通的无环图,并且每个顶点的度不大于3(根节点的度不大于2)。
二叉树的基本类型:
二叉树的实现:
- 节点结构设计
class Node{ private Object data; private Node leftChild; private Node rightChild; public Node(Object data){ this.data = data; this.leftChild =null; this.rightChild = null; } public Object getData(){ return this.data; } public void setData(Object data) { this.data = data; } public Node getLeftChild() { return leftChild; } public void setLeftChild(Node leftChild) { this.leftChild = leftChild; } public Node getRightChild() { return rightChild; } public void setRightChild(Node rightChild) { this.rightChild = rightChild; } }
2.创建二叉树
public Node createBTree(char[] str){ if(str[i]== '0'){ i++; return null; }else { Node node = new Node(str[i++]); node.setLeftChild(createBTree(str)); node.setRightChild(createBTree(str)); return node; } }
3.遍历二叉树
//先序递归遍历 public void preOrder(Node node){ if(node != null){ System.out.print(node.getData()); preOrder(node.getLeftChild()); preOrder(node.getRightChild()); } } //先序非递归遍历 public void nPreOrder(Node node){ Stack<Node> stack = new Stack<Node>(); while(node != null || !stack.isEmpty()){ while(node != null){ System.out.print(node.getData()); stack.push(node); node = node.getLeftChild(); } node = stack.pop(); node = node.getRightChild(); } } //中序递归遍历 public void inOrder(Node node){ if(node != null){ inOrder(node.getLeftChild()); System.out.print(node.getData()); inOrder(node.getRightChild()); } } //中序非递归遍历 public void nInOrder(Node node){ Stack<Node> stack = new Stack<Node>(); while(node != null || !stack.isEmpty()){ while(node != null){ stack.push(node); node = node.getLeftChild(); } node = stack.pop(); System.out.print(node.getData()); node = node.getRightChild(); } } //后序递归遍历 public void pastOrder(Node node){ if(node != null){ pastOrder(node.getLeftChild()); pastOrder(node.getRightChild()); System.out.print(node.getData()); } } //后序非递归遍历 public void nPastOrder(Node node){ Stack<Node> stack = new Stack<Node>(); Node preNode = null; while(node != null || !stack.isEmpty()){ while(node != null){ stack.push(node); node = node.getLeftChild(); } node = stack.peek(); if(node.getRightChild() == null || node.getRightChild() == preNode){ System.out.print(node.getData()); node = stack.pop(); preNode = node; node = null; }else{ node = node.getRightChild(); } } }
4.测试及输出结果
public static void main(String[] args) { String str = "ABC00DE00F00G0H00"; BTreeTest bt = new BTreeTest(); root = bt.createBTree(str.toCharArray()); System.out.print("先序递归遍历:"); bt.preOrder(root); System.out.println(); System.out.print("先序非递归遍历:"); bt.nPreOrder(root); System.out.println(); System.out.print("中序递归遍历:"); bt.inOrder(root); System.out.println(); System.out.print("中序非递归遍历:"); bt.nInOrder(root); System.out.println(); System.out.print("后序递归遍历:"); bt.pastOrder(root); System.out.println(); System.out.print("后序非递归遍历:"); bt.nPastOrder(root); } /** *输出结果: *先序递归遍历:ABCDEFGH *先序非递归遍历:ABCDEFGH *中序递归遍历:CBEDFAGH *中序非递归遍历:CBEDFAGH *后序递归遍历:CEFDBHGA *后序非递归遍历:CEFDBHGA */
0 0
- 二叉树的结构分析及实现
- 二叉树结构的实现
- 树及二叉树的存储结构
- 数据结构与算法分析笔记与总结(java实现)--二叉树23:树的子结构
- 二叉树类结构的实现
- 二叉树的结构与实现
- 二叉树的存储结构和实现
- 二叉树结构的java实现
- 二叉树的链式结构实现
- 线索二叉树结构的实现
- Python笔记——几种数据结构的实现:栈、队列及二叉树
- Python笔记——几种数据结构的实现:栈、队列及二叉树
- 二叉树-----数组存储结构及操作算法的实现------堆排序
- Python——几种数据结构的实现:栈、队列及二叉树
- python几种数据结构的实现:栈、队列及二叉树
- Python笔记——几种数据结构的实现:栈、队列及二叉树
- Python笔记——几种数据结构的实现:栈、队列及二叉树
- 二叉平衡树的实现,AVL平衡树的实现与分析及测试
- PL/SQL 游标
- mybatis 查询参数为list、数组、map的情况
- css中英文字母和汉字行高不同解决方法
- SVN与GIT的区别
- Continuation 异步化机制
- 二叉树的结构分析及实现
- lxml Element类相关的介绍
- Java NIO原理图文分析及代码实现
- Spring对hibernate配置文件hibernate.cfg.xml的集成,来取代hibernate.cfg.xml的配置
- mac下忘记root密码
- Js之遇到的BUG
- 使用应用程式专用密码登陆Xcode
- HttpClient超时机制算法探讨
- 虚幻4的关卡动态加载机制