已知二叉树的结构typedef struct node{char data; struct node * lchild,*rchild;}tnode;/*lchild代表指向左子数指针,rchild代表指向右子树指针*/请问谁会写一个函数判别该二叉树是否为排序树.我想要一个详细源程序,谢谢
热心网友
只要对待判定的二叉树中的结点按层遍历并判断即可。在该算法中要用到队列保存已遍历的结点指针。 typedef BinTNode *DataType;//循环队列中元素为二叉树结点指针 int BinSortStree(BinTree T) { CirQueue Q; BinTNode *p; if (!T) return 1;//空树为二叉排序树 InitQueue(&Q); EnQueue(&Q,T); while(!QueueEmpty(&Q)) { p=DeQueue(&Q); if (p-lchild) if (p-datalchild-data) return -1;//不是二叉排序树 else EnQueue(&Q,p-lchild); if (p-rchild) if (p-datap-rchild-data) return -1;//不是二叉排序树 else EnQueue(&Q,p-rchild); } return 1;//是二叉排序树 。
热心网友
按上面的方法就成,跌代判断每一个接点是否满足(lchid-data data data)或者相反顺序。