但是 if( pre != NULL && pre->rchild) 卻能正常輸出結果 這是為什么啊
uj5u.com熱心網友回復:
#include<stdio.h>#include<malloc.h>
typedef struct Treenode
{
char a;
struct Treenode * lchild, *rchild;
int ltag, rtag;
}Treenode, *Bitree;
void createtree(Bitree &T) {
char a;
scanf("%c", &a);
if (a == ' ') {
T = NULL;
}
else {
T = (Bitree)malloc(sizeof(Treenode));
T->a = a;
T->ltag = 0;
T->rtag = 0;
createtree(T->lchild);
createtree(T->rchild);
}
}
void creattt(Bitree &T) {
T = (Bitree)malloc(sizeof(Treenode));
T->a = 'A';
T->lchild = NULL;
T->rchild = NULL;
}
void visit(Bitree T) {
printf("%c", T->a);
}
void inthread(Bitree &T, Bitree & pre) {
if (T != NULL) {
inthread(T->lchild, pre);
if (T->lchild == NULL) {
T->lchild = pre;
T->ltag = 1;
}
if (pre != NULL && pre->rchild == NULL) {
pre->rchild = T;
pre->rtag = 1;
}
pre = T;
inthread(T->rchild, pre);
}
}
void creatthread(Bitree &tree) {
Bitree pre = NULL;
if (tree != NULL) {
inthread(tree, pre);
pre->rchild = NULL;
pre->rtag = 1;
}
}
Treenode * Firstnode(Bitree T) {
while(T->ltag == 0) {
T = T->lchild;
}
return T;
}
Treenode * Nextnode(Bitree T) {
if (T->rtag == 0) {
return Firstnode(T->rchild);
}
else {
return T->rchild;
}
}
void inthreadorder(Bitree T) {
for (Treenode* p = Firstnode(T); p != NULL; p = Nextnode(p)) {
visit(p);
}
}
int main() {
Bitree t;
createtree(t);
creatthread(t);
inthreadorder(t);
return 0;
}
uj5u.com熱心網友回復:
如果pre是空則出錯uj5u.com熱心網友回復:
因為先計算pre!=NULL 如果pre為NULL 不會計算Pre->rchild 所以,那個不會出錯。反之必然出錯。
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/69197.html
標籤:C++ 語言
上一篇:C語言回圈遇到了一些問題
