美文网首页
非递归求树的深度

非递归求树的深度

作者: 小码弟 | 来源:发表于2018-10-15 18:12 被阅读0次
    th.jpg

    非递归求深度有两种算法:1,现将算法改成先序遍历,在改写成非递归方式。先序遍历遍历是:遍历一个节点前,先算出当前节点在哪一层,层数最大就等于二叉树的深度。

    typedef struct Node
    {
      char data;
      struct Node* lchild;
      struct Node* rchild;
      struct Node* parent;
    }BNode, *BTree;
    
    int max(int a, int b)
    {
      return a>b?a:b;
    }
    int getDepthPreorder(BTree root)
    {
      struct Info
      {
        const BTree TreeNode;
        int level;
      };
      deque<Info> dq;
      int level = -1;
      int TreeHeight = -1;
      
      while(1)
      {
        while(root)
        {
          ++level;
          if(root->rchild)
          {
                Info info = {root->rchild, level};
                dq.push_back(info);
          }
          root = root->lchild;
        }
      TreeHeight = max(TreeHeight, level);
      if(dq.empty())
        break;
      const Info& info = dq.back();
      root = info.TreeNode;
      level = info.level;
      dq.pop_back();
      }
    return TreeHeight;
    }
    

    相关文章

      网友评论

          本文标题:非递归求树的深度

          本文链接:https://www.haomeiwen.com/subject/kkqqzftx.html