stack<BTNode *> FindAncestorsNode(BTNode *b, ElemType x) {
BTNode *p = b, *r;
stack<BTNode *> sq;
bool flag;
do {
while (p != NULL) {
sq.push(p);
p = p->lchild;
}
r = NULL;
flag = true;
while (!sq.empty() && flag) {
p = sq.top();
if (p->rchild == r) {
if (p->data == x) {
sq.pop();
return sq;
} else {
sq.pop();
}
r = p;
} else {
p = p->rchild;
flag = false;
}
}
} while (!sq.empty());
return sq;
}
bool JudgeCompleteBinaryTree(BTNode *b) {
BTNode *p;
queue<BTNode *> q, sq;
q.push(b);
while (!q.empty()) {
p = q.front();
sq.push(p);
q.pop();
if (p != NULL) {
q.push(p->lchild);
q.push(p->rchild);
}
}
bool flag = false;
while (!sq.empty()) {
p = sq.front();
sq.pop();
if (p == NULL)
flag = true;
if (p != NULL && flag)
return false;
}
return true;
}
struct TBTNode {
ElemType data;
int ltag, rtag;
TBTNode *lchild;
TBTNode *rchile;
};
struct HTNode {
char data;
double weight;
int parent;
int lchild;
int rchild;
};
void CreateHT(HTNode ht[], int n0) {
int i, k, lnode, rnode;
double min1, min2;
for (i = 0; i < 2 * n0 - 1; i++)
ht[i].parent = ht[i].lchild = ht[i].rchild = -1;
for (i = n0; i < 2 * n0 - 1; i++) {
min1 = min2 = 32767;
lnode = rnode = -1;
for (k = 0; k < i; k++) {
if (ht[k].parent == -1) {
if (ht[k].weight < min1) {
min2 = min1;
rnode = lnode;
min1 = ht[k].weight;
lnode = k;
} else if (ht[k].weight < min2) {
rnode = k;
min2 = ht[k].weight;
}
}
}
ht[i].weight = min1 + min2;
ht[i].rchild = rnode;
ht[i].lchild = lnode;
ht[lnode].parent = ht[rnode].parent = i;
}
}
struct HCode {
char cd[N];
int start;
};
void CreateHCode(HTNode ht[], HCode hcd[], int n0) {
int i, f, c;
HCode hc;
for (i = 0; i < n0; i++) {
hc.start = n0;
c = i;
f = ht[i].parent;
while (f != -1) {
if (ht[f].lchild == c) {
hc.cd[hc.start--] = '0';
} else {
hc.cd[hc.start--] = '1';
}
c = f;
f = ht[f].parent;
}
hc.start++;
hcd[i] = hc;
}
}
void DisHTCode(HTNode ht[], HCode hcd[], int n0){
for(int i=0;i<n0;i++){
cout<<ht[i].data<<"的哈夫曼编码为:";
for(int j=hcd[i].start;j<=n0;j++){
cout<<hcd[i].cd[j];
}
cout<<endl;
}
};