问题:
设f(b, x)在二叉树b中查找值为x的结点(唯一),找到后返回其指针,否则返回NULL。
二叉树的结构:
typedef struct BTNode
{
ElemType data;
struct BTNode *lchild, *rchild;
} BTNode;
递归算法:
BTNode *FindNode(BTNode *b, ElemType x)
{
BTNode *p;
if (b == NULL) return NULL;
else if (b->data == x) return b;
else {
p = FindNode(b->lchild, x);//一直往左边查找
if (p != NULL) return p;
else {
return FindNode(b->rchild, x);//往右边找
}
}
}
非递归算法:其实和二叉树的前序非递归遍历算法差不多,只需要在访问结点的地方稍微改造一下就行。
BTNode *FindNode(BTNode *b, ElemType x)
{
BTNode *p, Stack[MaxSize];
int top = -1;
p = b;
while (top > -1 || p != NULL)
{
while (p != NULL)
{
if (p->data == x) return p;
Stack[top++] = p;
p = p->lchild;
}
if (top > -1)
{
p = Stack[--top];
p = p->rchild;
}
}
}