Java实现二叉树及各种操作
来源:互联网 发布:刘诗诗同款衣服淘宝 编辑:程序博客网 时间:2024/05/13 17:54
public class BinTree { public final static int MAX = 40; private Object data; //数据元数 private BinTree left, right; //指向左,右孩子结点的链 BinTree[] elements = new BinTree[MAX];//层次遍历时保存各个节点 int front;//层次遍历时队首 int rear;//层次遍历时队尾 public BinTree() { } public BinTree(Object data) { //构造有值结点 this.data = data; left = right = null; } public BinTree(Object data, BinTree left, BinTree right) { //构造有值结点 this.data = data; this.left = left; this.right = right; } public String toString() { return data.toString(); } //前序遍历二叉树 public static void preOrder(BinTree parent) { if (parent == null) return; System.out.print(parent.data + " "); preOrder(parent.left); preOrder(parent.right); } //中序遍历二叉树 public void inOrder(BinTree parent) { if (parent == null) return; inOrder(parent.left); System.out.print(parent.data + " "); inOrder(parent.right); } //后序遍历二叉树 public void postOrder(BinTree parent) { if (parent == null) return; postOrder(parent.left); postOrder(parent.right); System.out.print(parent.data + " "); } // 层次遍历二叉树 public void LayerOrder(BinTree parent) { elements[0] = parent; front = 0; rear = 1; while (front < rear) { try { if (elements[front].data != null) { System.out.print(elements[front].data + " "); if (elements[front].left != null) elements[rear++] = elements[front].left; if (elements[front].right != null) elements[rear++] = elements[front].right; front++; } } catch (Exception e) { break; } } } //返回树的叶节点个数 public int leaves() { if (this == null) return 0; if (left == null && right == null) return 1; return (left == null ? 0 : left.leaves()) + (right == null ? 0 : right.leaves()); } //结果返回树的高度 public int height() { int heightOfTree; if (this == null) return -1; int leftHeight = (left == null ? 0 : left.height()); int rightHeight = (right == null ? 0 : right.height()); heightOfTree = leftHeight < rightHeight ? rightHeight : leftHeight; return 1 + heightOfTree; } //如果对象不在树中,结果返回-1;否则结果返回该对象在树中所处的层次,规定根节点为第一层 public int level(Object object) { int levelInTree; if (this == null) return -1; if (object == data) return 1;//规定根节点为第一层 int leftLevel = (left == null ? -1 : left.level(object)); int rightLevel = (right == null ? -1 : right.level(object)); if (leftLevel < 0 && rightLevel < 0) return -1; levelInTree = leftLevel < rightLevel ? rightLevel : leftLevel; return 1 + levelInTree; } //将树中的每个节点的孩子对换位置 public void reflect() { if (this == null) return; if (left != null) left.reflect(); if (right != null) right.reflect(); BinTree temp = left; left = right; right = temp; } // 将树中的所有节点移走,并输出移走的节点 public void defoliate() { String innerNode = ""; if (this == null) return; //若本节点是叶节点,则将其移走 if (left == null && right == null) { System.out.print(this + " "); data = null; return; } //移走左子树若其存在 if (left != null) { left.defoliate(); left = null; } //移走本节点,放在中间表示中跟移走... innerNode += this + " "; data = null; //移走右子树若其存在 if (right != null) { right.defoliate(); right = null; } } /** * @param args */ public static void main(String[] args) { // TODO Auto-generated method stub BinTree e = new BinTree("E"); BinTree g = new BinTree("G"); BinTree h = new BinTree("H"); BinTree i = new BinTree("I"); BinTree d = new BinTree("D", null, g);//(Object data, BinTree left, BinTree right) BinTree f = new BinTree("F", h, i); BinTree b = new BinTree("B", d, e); BinTree c = new BinTree("C", f, null); BinTree tree = new BinTree("A", b, c); tree.height(); System.out.println("前序遍历二叉树结果: "); tree.preOrder(tree); System.out.println(); System.out.println("中序遍历二叉树结果: "); tree.inOrder(tree); System.out.println(); System.out.println("后序遍历二叉树结果: "); tree.postOrder(tree); System.out.println(); System.out.println("层次遍历二叉树结果: "); tree.LayerOrder(tree); System.out.println(); System.out.println("F所在的层次: " + tree.level("F")); System.out.println("这棵二叉树的高度: " + tree.height()); System.out.println("--------------------------------------"); tree.reflect(); System.out.println("交换每个节点的孩子节点后......"); System.out.println("前序遍历二叉树结果: "); tree.preOrder(tree); System.out.println(); System.out.println("中序遍历二叉树结果: "); tree.inOrder(tree); System.out.println(); System.out.println("后序遍历二叉树结果: "); tree.postOrder(tree); System.out.println(); System.out.println("层次遍历二叉树结果: "); tree.LayerOrder(tree); System.out.println(); System.out.println("F所在的层次: " + tree.level("F")); System.out.println("这棵二叉树的高度: " + tree.height()); }}
0 0
- Java实现二叉树及各种操作
- java实现二叉树及遍历操作
- java 语言实现二叉树的各种操作
- java实现一个二叉查找树的各种操作
- java实现二叉树的创建和各种遍历操作
- 平衡二叉树各种操作java版本
- Java实现二叉搜索树及相关操作
- 二叉树基本操作java实现及遍历浅析
- 二叉树各种操作
- 二叉树各种操作
- java 实现二叉树操作
- 二叉树的创建及各种遍历操作
- 二叉树的实现及操作
- 二叉树实现及基本操作
- python实现二叉树及相关操作
- 二叉查找树的各种操作C++实现
- 二叉树各种操作的非递归实现
- 二叉查找树的各种操作C++实现
- Nodejs开发框架Express3.0开发手记–从零开始
- HTML5的自定义属性data-*
- Linux下FTP 命令大全
- 黑马程序员,看Java基础视频笔记:基础类型的大小范围和类型转换
- UVA 11762 Race to 1 概率DP
- Java实现二叉树及各种操作
- 【自动化测试】Pexpect自动化测试框架使用及实例
- javascript计算中文和英文的长度问题
- 细看INNODB数据落盘
- 视频插件
- Object-C详细编程教程(一):类定义与实现
- luence
- app改进心得
- 什么是备兑开仓