递归与非递归方式寻找二叉树中某个节点的值
题目:在二叉树中查询value值,如果存在返回节点的地址,否则返回NULL。
1.非递归的方法
BtNode *FindValue(BtNode *ptr,ElemType val)
{
if(ptr==NULL)
return NULL;
stack<BtNode *>st;
st.push(ptr);
while(!st.empty())
{
ptr=st.top();
st.pop();
if(ptr->data==val)
return ptr;
if(ptr->leftchild!=NULL)
{
st.push(ptr->leftchild);
}
if(ptr->rightchild!=NULL)
{
st.push(ptr->rightchild);
}
}
return NULL;
}
思路:首先访问一个根节点,当这个节点为空时,返回NULL。否则将根节点入栈,然后再栈中进行操作,只要栈不为空,就获取栈顶的元素,再将栈顶元素出栈,如果这个出栈的元素等于要查找的value值,就输出该元素的地址,否则就进入下一步,访问它的左右两个子树,只要它的左右子树,不为空,就将左右子树入栈再进行上述的循环操作。
2.递归的方法
BtNode *FindValue(BtNode *ptr,ElemType val)
{
if(ptr==NULL||ptr->data==val)
{
return ptr;
}
else
{
BtNode *p=FindValue(ptr->leftchild,val);
if(nullptr==p)
{
p=FindValue(ptr->rightchild,val);
}
return p;
}
}
思路:如果该节点为空,或者该节点的值等于value,直接返回该结点的地址,否则就去找它的左孩子,找不到就找它的右孩子。

302

被折叠的 条评论
为什么被折叠?



