c++写非递归的中序遍历时出错了,不知道怎么回事,自己感觉地址应该没问题
非递归中序遍历的函数
void PrintStack02(Node *head) {
stack <Node> hashmap;
/*cout << head->value;
system("pause");*/
while (!hashmap.empty()||head!=NULL) {
if (head != NULL) {
hashmap.push(*head);
head = head->left;
}
else {
*head = (hashmap.top());
cout << head->value << " ";
hashmap.pop();
*head = (hashmap.top());
head = head->right;
}
}
}
创建二叉树函数
void CreatTree(Node* head) {
Node* node01 = new Node(1);
Node* node02 = new Node(2);
Node* node03 = new Node(3);
Node* node04 = new Node(4);
Node* node05 = new Node(5);
Node* node06 = new Node(6);
Node* node07 = new Node(7);
Node* node08 = new Node(8);
Node* node09 = new Node(9);
head->left = node01;
head->right = node02;
node01->left = node03;
node01->right = node04;
node02->left = node05;
node02->right = node06;
node03->left = node07;
node03->right = node08;
node04->left = node09;
}
错误很明显,head 只有为 NULL 时才会进入 else 分支,空指针是不能解引用的。代码思路错了。
下面是C语言版的代码,比着改改吧。
void inorder(BT *root)
{
BT *stack[MAX_N], *p=root;
int top = -1;
while ( !(p==NULL && top==-1) ){
while ( p!=NULL ){
stack[++top] = p;
p = p->lchild;
}
p = stack[top--];
printf("%c ", p->nb);
p = p->rchild;
}
}