【数据结构+Java】Java实现二叉树的增查、先/中/后序遍历
2018-01-17 22:05
561 查看
Java实现二叉树的增查、先/中/后序遍历
github代码地址
package Tree; import java.util.Scanner; /** * 节点 * @author wsz * @date 2018年1月17日 */ class TreeNode{ String data; TreeNode left; TreeNode right; } /** * @author wsz * @date 2018年1月17日 */ public class TreeDemo { static Scanner s = new Scanner(System.in); static int SIZE = 30; //初始化树 TreeNode intTree(){ TreeNode node = new TreeNode(); if(node != null) { System.out.println("输入根节点数据:"); node.data = s.next(); node.left = null; node.right = null; } return node; } /** * 添加节点 * @param node 被添加节点的数 */ void AddTreeNode(TreeNode node) { TreeNode pnode,parent; String data; if((pnode = new TreeNode()) != null) { System.out.println("输入二叉树节点数据:"); pnode.data = s.next(); pnode.left = null; pnode.right = null; System.out.println("输入父节点数据:"); data = s.next(); parent = findTreeNode(node,data); if(parent == null) System.out.println("没有找到父节点"); System.out.println("1:添加到左子树 2:添加到右子树"); int select = s.nextInt(); do { switch(select) { case 1 : if(parent.left != null) { System.out.println("左节点不为空"); }else { parent.left = pnode; } break; case 2 : if(parent.right != null) { System.out.println("右节点不为空"); }else { parent.right = pnode; } break; default : System.out.println("参数无效"); } }while(select != 1 && select !=2); } } /** * 查找树中某一节点 * @param node root树 * @param data 节点的数据 * @return */ TreeNode findTreeNode(TreeNode node,String data) { TreeNode ptr; if(node != null){ if(data.equals(node.data)) { return node; }else { if((ptr = findTreeNode(node.left,data)) != null) { return ptr; }else if((ptr = findTreeNode(node.right,data)) != null) { return ptr; } } } return null; } /** * 获取当前节点的右节点 * @param node * @return */ TreeNode treeRightNode(TreeNode node) { if(node != null) return node.right; return null; } /** * 获取当前节点的左节点 * @param node * @return */ TreeNode treeLeftNode(TreeNode node) { if(node != null) return node.left; return null; } /** * 获取树的深度 * @param node root树 * @return */ int treeDeep(TreeNode node) { int left,right; if(node == null) { return 0; }else { left = treeDeep(node.left); right = treeDeep(node.right); if(left > right) { return left+1; }else { return right+1; } } } /** * 清空树 * @param node */ void clearTree(TreeNode node) { if(node != null) { clearTree(node.left); clearTree(node.right); node = null; } } void showData(TreeNode node) { System.out.print(nod 9eb4 e.data+" "); } //按层遍历 void levelTree(TreeNode node) { TreeNode p ; TreeNode[] q = new TreeNode[30]; int head=0,tail=0; if(node != null) { tail = (tail+1)%SIZE; q[tail] = node; } while(head != tail) { head = (head+1)%SIZE; p = q[head]; showData(p); if(p.left != null) { tail =(tail+1)%SIZE; q[tail] = p.left; } if(p.right != null) { tail =(tail+1)%SIZE; q[tail] = p.right; } } } //先序遍历 void firstTree(TreeNode node) { if(node != null) { showData(node); firstTree(node.left); firstTree(node.right); } } //中序遍历 void secodeTree(TreeNode node) { if(node != null) { secodeTree(node.left); showData(node); secodeTree(node.right); } } //后序遍历 void threeTree(TreeNode node) { if(node != null) { threeTree(node.left); threeTree(node.right); showData(node); } } /** * @param args */ public static void main(String[] args) { TreeDemo td = new TreeDemo(); TreeNode root = td.intTree(); int select; do { System.out.println("0:退出 1添加子节点"); select = s.nextInt(); switch(select) { case 1: td.AddTreeNode(root); break; case 0: break; default: ; } }while(select != 0); System.out.println("深度:"+td.treeDeep(root)); td.levelTree(root); System.out.println(""); td.firstTree(root); System.out.println(""); td.threeTree(root); } }
相关文章推荐
- 【数据结构】之二叉树的java实现
- 数据结构二叉树的java实现,包括二叉树的创建、搜索、删除和遍历
- 数据结构 — 二叉树(创建、遍历)java实现
- 数据结构:二叉树的基本操作(JAVA实现)
- java链表的数据结构和二叉树的实现
- 数据结构(JAVA)---二叉树的简单实现及排序
- 数据结构:二叉树的三叉链表存储--Java实现
- 数据结构--java实现二叉树的先序、中序、后序、层次遍历及根据先序中序建立二叉树
- 重温数据结构:二叉树的常见方法及三种遍历方式 Java 实现
- 【数据结构】之二叉树的java实现
- 数据结构——树(2)一般树转二叉树Java实现
- 数据结构的Java实现——二叉树
- [数据结构]--二叉树以及Java实现
- 【数据结构和算法】之二叉树的java实现
- 【数据结构】之二叉树的java实现
- 重温数据结构:二叉树的常见方法及三种遍历方式 Java 实现
- 【数据结构】之二叉树的java实现
- 关于java二叉树数据结构的实现
- Java中链表、堆栈、队列、二叉树、散列表等数据结构的实现
- 【数据结构】之二叉树的java实现