1、二叉树各功能模块介绍
1.1、创建二叉树
二叉树数据输入是广义表输入形式:A(B(C),D(E(F,G),H(,I)))。创建该二叉树使用的是非递归方式。整个流程为:A是根元素,B、D为A的子节点,所以输入A时,把A作为根结点,遇到左括号(证明下一个有效数据输入是A的子树),此时把A压入栈中,接着来的数据是B,此时把A的数据读出来(但是此时A没有弹出栈),把B挂在A的左指针上,再次遇到左括号,此时把B也压入栈中,此时栈内有元素(B A)top指向B,然后输入C,由于C还是B的左子树,所以把B读出,然后把C挂在B上,当遇到右括号后,证明B已经没有右子树了,此时把B弹出堆栈,此时占中只有A元素,A的左子树已经构造完成。当遇到 ‘,’逗号时,表示遍历的右子树,输入D时,把A读出来,把D挂在A上,然后输入左括号,此时把D压入栈中,输入E,此时读出D,把E挂在D上,输入左括号,然后把E压入栈中,输入F,读出E,把F挂在E的左指针上,当遇到‘,’时,把结点标志设为右子树,读到G时,把G挂在E的右指针上,遇到右括号,此时弹出E,然后遇到‘,’ 把结点标志设为右子树,然后把D读出,把H挂在D上,遇到左括号,把H压入栈中,把I挂在H上,把H D A分别弹出。此时完成整个二叉树的构造。该二叉树构造需要用到堆栈,堆栈代码看我上一篇博客,在这里不做累述。二叉树结点代码如下:
package BiTreeTable;
public class BiTreeNode {
Object element;//结点元素
BiTreeNode left,right;//左右指针
public BiTreeNode(Object element){//构造方法
this.element=element;
}
public BiTreeNode(BiTreeNode left,BiTreeNode right,Object element){
this.left=left;
this.right=right;
this.element=element;
}
}
二叉树的创建代码如下:
//定义广义二叉树结点 二叉树广义表A(B(C),D(E(F,G),H(,I)))
public void creatBiTree(String gt) {
Stack sck=new sequencetStack(); //定义和创建一个保存结点元素的栈
root = null;
BiTreeNode p=null;
int k=1;
char a[]=gt.toCharArray();
for(int i=0;i<a.length;i++){
switch(a[i]){
case ' ':break;//去除无效空格
case '(': sck.push(p);//遇到左括号则入栈
k=1;//左节点标志
break;
case ')':
if(sck.isEmpty()){
System.out.println(