假设K1,…,Kn是n个关键词,试解答: (1)试用二叉查找树的插入算法建立一棵二叉查找树,即当关键词的插入次序为K1,K2,…,Kn时,用算法建立一棵以LLINK—RIJNK链接表示的二叉查找树。 (2)设计一个算法,打印出该二叉查找树的

admin2019-08-01  42

问题 假设K1,…,Kn是n个关键词,试解答:
    (1)试用二叉查找树的插入算法建立一棵二叉查找树,即当关键词的插入次序为K1,K2,…,Kn时,用算法建立一棵以LLINK—RIJNK链接表示的二叉查找树。
    (2)设计一个算法,打印出该二叉查找树的嵌套括号表示结构。假定该二叉查找树的嵌套括号表示结构为B(A,D(C,E))。

选项

答案(1)非递归建立二叉排序树,在二叉排序树上插入的结点都是叶子结点。 typedef struet node{ Elemtype data; struet node*LLINK,*RLINK: }node*BiTree; void Create_BST(B/Tree bst,datatype K[],int n){ //以存储在数组K中的n个关键字,建立一棵初始为空的二叉排序树 int i; BiTree P,f; for(i=1;i<=n;i++){ P=bst:f=null; //在调用Create_BST时,bst=null while(P!=null) if(P->data<K[i]){f=P;P=p一>RLINK;} I/f是P的双亲 else if(p->data>K[i]){f=p:P=p一>LLINK;} S=(BiTree)malloc(sizeof(B/Node));//申请结点空间 s->data=K[i];s->LLINK=null;s一>RLINK=null; if(f==null)bst=S: //根结点 else if(s一>data<f一>data)f->LLINK=s; //左子女 else f一>RLINK=s: //右子树根结点的值大于等于根结点的值 } } (2)本题要求输出遍历二又排序树的嵌套括号表示。其算法思想是,若二叉排序树非空,则输出根结点,再输出其左右子树。在输出其左右子树前,要输出左括号,在输出其右子树前要输出逗号,在输出其右子树后要输出右括号,在左右子树均空情况下,则不输出括号。 void Print(BiTree t){ //以嵌套括号表示结构打印二叉排序树 if(t!=null){ printf(t->data): //打印根结点值 if(t一>LLINK ||t->LLINK); //左子女和右子女中至少有一个不空 printf(”(”); //输出左括号 Print(t->LLINK); //输出左子树的嵌套括号表示 if(t->RLINK)printf(”,”); //若右子树不空,输出逗号 Print(t一>RLINK): //输出右子树的嵌套括号表示 printf(”)”); //输出右括号 } }

解析
转载请注明原文地址:https://kaotiyun.com/show/A3Ci777K
0

最新回复(0)