问答题 假设K1,…,Kn是n个关键词,试解答:
问答题 试甩二叉查找树的插入算法建立一棵二叉查找树,即当关键词的插入次序为K1,K2,…,Kn时,用算法建立一棵以LLINK/RLINK链接表示的二叉查找树。
【正确答案】正确答案:建立二叉排序树,首先要在二叉排序树上查找被插结点的插入位置,并需知道被插结点的双亲。插入的结点都是叶子结点。查找算法如下: BSTree BST—Search(BSTree bst,f t Element K f int&tag) //在二叉排序树bst上查找值为K的结点,返回其双亲结点指针f {if(!bst){tag=0; return(f)} else if(bst->key==K){tag=1;return(bst);} else if(bst一>key>K) (f=bst;return BST—Search(bst一>ichild,f,K,tag);} else{f=bst;return BS’r_Search(bst一>rchild,f,K,tag);} }//BST—Search 建立一棵初始为空的二叉排序树的核心语句段如下: for(1=1;i≤n;i++) {f=BST—Search(t,f,K[i],flag); //调用时初值f=null,int flag=0 if(tag==1)tag=0 ; //不再插入相同值结点 el se{s=rlew(BiNode); //申请结点空间 s->key=K[i];s一>lchild=null;s一>rchild=null; if{f==null)t=s //根结点 else if(S一>keydata)f一>lchild=s;//左子女 else f一>rchild=s; //右子女 } }//for 若允许相同结点,则应取消tag,这样,相同结点插入右子树。
【答案解析】
问答题 设计一个算法,打印出该二叉查找树的嵌套括号表示结构。例如,K1=B,K2=A,K3=D,K4=C,K5=E,则用二叉查找树的插入算法建立的二叉查找树为:
【正确答案】正确答案:输出二又排序树嵌套括号的算法思想是,若二叉排序树非空,则输出根结点,再输出其左、右子树。在输出其左、右子树前,要输出左括号,在输出其右子树前要输出逗号,在输出其右子树后要输出右括号,在左、右子树均空情况下,则不输出括号。核心语句是: if(t!=null) {cout<data; //打印根结点值 if(t一>lchild ||t一>rchild); //左子女和右子女中至少有一个不空 {cout<<“(”; //输出左括号 Print(t一>lchild); //递归输出左子树的嵌套括号表示 if(t一>rch~lcl)cout<<“,”; //若右子树不空,输出逗号 Print(t一>rchild); //递归输出右子树的嵌套括号表示 cout;<<“)”; //输出右括号 }//if }
【答案解析】