关于二叉树的基本概念:二叉树基本概念
二叉树实现的方法:
* isEmpty():判断树是否为空。
* clear():清空二叉树。
* add(BTNode, Type):向指定节点添加指定的孩子。
* height():计算二叉树的高度。
* size():计算二叉树的大小。
* findNode():查找包含指定数据的节点是否存在。
* findParent():查找包含指定数据的节点的父节点。
* recursePreIterate():递归先序遍历二叉树。
* recurseInIterate():递归中序遍历二叉树。
* recursePostIterate():递归后序遍历二叉树。
* circlePreIterate():循环先序遍历二叉树。
* circleInIterate():循环中序遍历二叉树。
* circlePostIterate():循环后序遍历二叉树。
* layerIterate():层次遍历二叉树
首先是二叉树的节点的代码(BTNode):
/**
* 二叉树的二叉链式存储实现的节点
*/
public class BTNode<Type>{
/**
* 每一个节点需要保存的内容:本身数据、左孩子、右孩子
* data:自身数据
* left:左孩子
* right:右孩子
*/
private Type data;
private BTNode left;
private BTNode right;
/**
* 三种构造方法
*/
public BTNode(){//空构造方法
data = null;
left = null;
right = null;
}
public BTNode(Type data){//只有数据的构造方法
this.data = data;
this.left = null;
this.right = null;
}
//四个内容都有的构造方法
public BTNode(Type data, BTNode left, BTNode right, BTNode parent){
this.data = data;
this.left = left;
this.right = right;
}
/**
* 三个属性的 get() 方法
*/
public BTNode getLeft() {
return left;
}
public BTNode getRight() {
return right;
}
public Type getData() {
return data;
}
/**
* 三个属性的 set()方法
*/
public void setData(Type data) {
this.data = data;
}
public void setLeft(BTNode left) {
this.left = left;
}
public void setRight(BTNode right) {
this.right = right;
}
}
(复制即可用)
下面是二叉树实现的代码(BinaryTree):
import stackImp.Stack;//自己实现的栈
/**
* 二叉树的二叉链式实现
* 三叉链式实现比二叉链式实现少一个查找父节点的方法
* 实现过程中,需要使用的栈是我自己编写的栈,代码见我的blog文章:栈(Stack)的Java实现
*
* 二叉树需要实现的方法:
* isEmpty():判断树是否为空。
* clear():清空二叉树。
* add(BTNode, Type):向指定节点添加指定的孩子。
* height():计算二叉树的高度。
* size():计算二叉树的大小。
* findNode():查找包含指定数据的节点是否存在。
* findParent():查找包含指定数据的节点的父节点。
* recursePreIterate():递归先序遍历二叉树。
* recurseInIterate():递归中序遍历二叉树。
* recursePostIterate():递归后序遍历二叉树。
* circlePreIterate():循环先序遍历二叉树。
* circleInIterate():循环中序遍历二叉树。
* circlePostIterate():循环后序遍历二叉树。
* layerIterate():层次遍历二叉树。
*/
public class BinaryTree<Type> {
/**
* root:二叉树的根节点
*/
private BTNode root;//根节点
/**
* 两种构造方法
*/
public BinaryTree(){//空构造方法
root = null;
}
public BinaryTree(Type data){//使用一个数据的构造方法
root = new BTNode(data);
}
/**
* root 的 get() 方法和 set() 方法
*/
public BTNode getRoot() {
return root;
}
public void setRoot(BTNode root) {
this.root = root;
}
/**
* 判断树是否为空
* @return 树是否为空
*/
public boolean isEmpty(){
if ((root == null))//根节点为空
return true;
return false;
//简单的实现: return (root == null);