问题 问答题

试编写一个非递归算法.实现求以二叉链表存储的二叉树中q结点的祖先。

答案

参考答案:

解析:该题可采用按后序遍历二叉树的非递归算法,当访问q结点时,结点栈中所有栈元素均为q结点的祖先。 #define MAX 1000 void Ancestor(BTTree*T,BTNode* q) { BTNode* s[MAX];//栈实现非递归 BTNode* P=T: int b[MAX]; int top=-1: do{ while(p) { s[++top]=P; b[top]=0; p=p->lchild; } if(top>-1 && b[top]=-1) { P=s[top]; if(p==q) { printf("q结点的祖先是:\n"); for(inti=0;i<=top;i++) printf("%C",s[i]->data); return; } else top--; } if(top>-1) { P=s[top]->rchild; b[top]=1; } }while(top>-1); }

选择题
多项选择题