假设二叉树采用二叉链表作为存储结构,试编写一个算法:求任意一个指定结点所在的层次。

【说明】:假设二叉树中无结点值相同的,且要求采用非递归算法。... 【说明】:假设二叉树中无结点值相同的,且要求采用非递归算法。 展开
 我来答
940929021
2019-10-25
知道答主
回答量:12
采纳率:0%
帮助的人:2.3万
展开全部

非递归中序遍历

构造变量count记录当前层访问到的节点数,nextcount记录当前层的总个数;
每当访问过一层层数depth++;
此种方法同时可以求最大宽度,访问第几层的第几个节点,求带权路径长度WPL,是一种通用方法!
int TreeDepth(TreeNode* pRoot)
{
queueq;
q.push(pRoot);
if(pRoot==NULL)return 0;
TreeNode* p;
int depth = 0;
int count = 0;
int nextcount = 1;
while(!q.empty())
{
        count++;
        p = q.front();
        q.pop();
        if(p->left!=NULL)
        {
            q.push(p->left);
        }
        if(p->right!=NULL)
        {
            q.push(p->right);
        }
        if(count==nextcount)
        {
            depth++;
            count=0;
            nextcount=q.size();
        }
}
return depth;
}
夜雨楽
2013-12-20
知道答主
回答量:2
采纳率:0%
帮助的人:2796
展开全部
求其他大神解答
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
闥魅妖
推荐于2017-09-27
知道答主
回答量:8
采纳率:0%
帮助的人:10.1万
展开全部
template <class T>
T search(BSTNode<T>* tree, const T& elemt)
{
stack<BSTNode<T>*> travStack;
BSTNode<T> *p = root; //遍历指针
BSTNode<T> *q = root; //层数看守
int num = 1;
If(p != NULL)
travStack.push(p);
while(!travStack.empty())
{
p = travStack.pop();
if(p->data != elemt)
if(p == q)
{
if(q->right != NULL)
{
q = q->right;
}
q = q->left;
num+=1;
}
else
{
cout<<"The number of piles is "<<num<<endl;
break;
}
if(p->left != NULL)
travStack.push(p->left);
if(p->right != NULL)
travStack.push(p->right);
}
}

这个是C++实现的,效率不高。主要运用的是前序遍历的方式,存取方式用的是队列;
思想:设置层数看守,看守始终在该层的最右端;按层次遍历,将该层元素从左向右加入到队列中;找到要求值就停止;
本回答被提问者采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
焚香一只鬼
2013-12-20 · TA获得超过112个赞
知道答主
回答量:89
采纳率:0%
帮助的人:105万
展开全部
层层遍历咯,只学过单链表,不知道指定节点有什么特征。。。感兴趣的话,咋俩聊聊 说不定就弄出来了
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 3条折叠回答
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式