开发者社区> 问答> 正文

如何用非递归算法求二叉树的高度

如何用非递归算法求二叉树的高度

展开
收起
知与谁同 2018-07-21 14:23:27 3148 0
2 条回答
写回答
取消 提交回答
  • 遍历一下,不用递归就广度遍历就好了
    2019-07-17 22:55:42
    赞同 展开评论 打赏
  • 静静的看着你们
    如果是结点的定义中有深度这个属性,那么用一个队列就可以了。
    队首放节点 队尾取出节点
    比如:根节点放入队列 (开始只有这个一个节点在队列中)
    然后呢 从队尾取出这个根节点 然后打散 把他的左右孩子放入对首(这时候有2个节点 也就是二叉树的第二层)
    之后从队伍里取出这2个节点 打散 之后队伍里应该是 二叉树第三层的4个节点
    。。。。。
    这样就把二叉树层次遍历了
    因为有些节点没有孩子节点 也就是叶子
    这个队列中的节点 逐渐会越来越少
    最后一个取出队列的节点 的深度也就是二叉树的高度

    如果结点定义没有深度,我写了一个方法,请楼主参考。
    public static int findlevel(BinaryNode root)
    {
    ArrayList<LinkedList<BinaryNode>> result=new ArrayList<LinkedList<BinaryNode>>();
    LinkedList<BinaryNode> list=new LinkedList<BinaryNode>();
    list.add(root);
    result.add(list);
    int level=0;
    while(true)
    {
    list=new LinkedList<BinaryNode>();
    for(int i=0;i<result.get(level).size();i++)
    {
    BinaryNode tmp=result.get(level).get(i);
    if(tmp.left!=null)
    list.add(tmp.left);
    if(tmp.right!=null)
    list.add(tmp.right);
    }
    if(list.size()>0)
    result.add(list);
    else
    break;
    level++;
    }

    return level;
    }

    其实思路和刚才说的是大同小异的,用一个level来记录二叉树的层次,最底的层次就是他的高度。
    每一层都存在单独的list里,这些list再存在一个arraylist里,这样很容易就能知道每一层有哪些结点,如果这些结点有孩子,就把level++,直到某一层没有任何结点有孩子,这时候level就是最后一层了。
    2019-07-17 22:55:42
    赞同 展开评论 打赏
问答分类:
问答标签:
问答地址:
问答排行榜
最热
最新

相关电子书

更多
数据+算法定义新世界 立即下载
袋鼠云基于实时计算的反黄牛算法 立即下载
Alink:基于Apache Flink的算法平台 立即下载