1试编写判断二叉树是否为二叉排序树 (2) 2
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
1试编写判断二叉树是否为二叉排序树Void is_but(BSTree bt)
{Btree p,pre,s[maxsize];
P=bt;
Int top=0;
Int x=minvol;
While(pl=null)||(top|=0))
{while(pl=num)
{
s[top]=p;
top=top+1;
p=p>|child;
}
If(top|=0)
{
top=top-1;
p=s[top];
if(x<=p->data) x=p->data; /*若非递减,则继续,否则结束*/
else return(false);
p=p->rchild;
}
}
return(true);
}
2假设有一个长度大于一的循环链表,在链表中删除指针s的指向的结点
int Del-LinkList(LinkList s)
{LinkList p=s;
While(p->next|=s)
P=p->next;
p->next=s->next;
return(1);
}
3求二叉树度为2的结点数,
Leaf-counter(Btree t)
{counter=0;
PseqStack S;
Btree p=t;
S=Init-SeqStack();
While(p||Iempty-SeqStack(S))
{
If(p)
{
Push-SeqStack(S,p);
p=p->|child;
}
else
{
Pop-SeqStack(S,p);
If((p=p->|child==null)&&(p->rchild==null))c ounter++;
P=p->rchild;
}
}
Return(ounter);
}
4已知线性表(a1,a2,a3...)吧所有负值元素移到左边。
V oid shift(int R[], int n)
{int low,high;
Low=0;high=n-1;
While(low { While((low While((low If(low } } 5.求出链表中最大值的第一个结点的地址。Linklist findmax(linklist head) {linklist p,q; Datatype max; If(head ==null) return(null);/*表为空,返回*/ q=head; max=head->data; P=head->next; While(p|=null) { if(max {max=p->data; q=p; } P=p->next; } return(q); } 6求二插链表结构二叉树度为一的节点数Int count(bintree *t)/*求二插链表结构二叉树t度为一的节点数*/ { Int num1,num2; If(t==NULL) return(0); else if((t->|child==NULL&&t->rchild!=NULL)||(t->1child!=NULL&&t->rchild==NULL)) return(1); else { num1=count(t->1child); num2=count(t->rchild); return(num1+num2); } } 7二叉树T中查找只为x的算法。BinSTree BSTreeSearch(BinSTree t,KeyType X)/*二叉树中查找值为X的算法*/ ( BinStree q; q=t; While(t) { q=t; If(t->key==X) /*查找成功*/ Return(t); If(t->key<=X) t=t->1child; /*在左子树中查找*/ else t=t->rchild;/*在右子数中查找*/ } return(t); }