【问题标题】:How can I get number of leaf nodes in binary tree non-recursively?如何以非递归方式获取二叉树中的叶节点数?
【发布时间】:2012-11-20 04:54:04
【问题描述】:

我有一个难以解决的练习问题 - 在不使用递归的情况下获取二叉树中叶节点的数量。我已经环顾了一下周围的想法,我已经看到了一些诸如将节点传递给堆栈的方法,但是当有多个分支时,我不知道该怎么做。谁能给个指点?

【问题讨论】:

  • 做一个非递归遍历树并计算叶子。您可以用堆栈、队列或定义顺序来替换递归。
  • without using recursion 是什么意思?任何递归函数都可以迭代完成。虽然问题仍然是递归的......
  • 我会看看如何进行非递归遍历。通过递归,我想我的意思是有一个调用自身的方法。
  • 我已经提出了一些基于简单二叉树遍历的解决方案——我应该将它发布在我的问题中,还是仅仅提供它作为答案? Jan 你所说的可能已经足够回答了.. 真的是一个非常简单的问题。

标签: binary-tree nodes non-recursive


【解决方案1】:
NumberOfLeafNodes(root);
int NumberOfLeafNodes(NODE *p)
{
    NODE *nodestack[50];
    int top=-1;
    int count=0;
    if(p==NULL)
        return 0;
    nodestack[++top]=p;
    while(top!=-1)
    {
        p=nodestack[top--];
        while(p!=NULL)
        {
            if(p->leftchild==NULL && p->rightchild==NULL)
                count++;
            if(p->rightchild!=NULL)
                nodestack[++top]=p->rightchild;
            p=p->leftchild;      
        }
    }
return count;
}

【讨论】:

  • 感谢您的回复。我不知道这种语言,我猜是 Obj-C 或 C++,你能解释一下这段代码吗?我无法对其进行测试,因此在它至少对我有意义之前,我无法真正将其标记为答案。
  • 即 C。它假定 NODE 结构类型已通过 typedef 定义。您可以将其视为某种具有左子属性和右子属性的对象。如果您了解任何其他编程语言,其余的就很容易解释了。
猜你喜欢
  • 2021-02-13
  • 2010-11-03
  • 2012-01-26
  • 1970-01-01
  • 2019-12-06
  • 2018-10-30
  • 1970-01-01
  • 1970-01-01
  • 2015-06-14
相关资源
最近更新 更多