zoukankan      html  css  js  c++  java
  • 求二叉树的深度算法

    算法的思想:

      采用二叉树的后序遍历非递归算法。由于后序遍历非递归算法使用一个栈实现,每次都会在一条路径上走到最底层才向上访问,再向右访问。因此,记录下栈在遍历中的最大值,即为二叉树的最大深度。

    #include <iostream>
    #include <stack>
    using namespace std;
    typedef struct BinTree
    {
        int data;
        BinTree *lc;
        BinTree *rc;
    }BTNode,*BinTree;
    int max(int a,int b)
    {
        return (a>b)?a:b;
    }
    
    int BinTreeDepth(BinTree T)
    {
        stack<BinTree> s;
        BinTree p = T,r = NULL;
        int depth=0;
        while(p||!s.empty())
        {
            if(p)
            {    //从根节点向左边走
                s.push(p);
                int size = s.size();//获取栈的大小
                depth = max(depth,size);//替换最大值
                p = p->lc;
            }
            else
            {    //左边走不通向右走
                p = s.top();
                if(p->rc&&p->rc!=r)//如果右子树存在,且未被访问过
                {
                    p = p->rc;
                    s.push(p);
                    int size = s.size();//获取栈的大小
                    depth = max(depth,size);//替换最大值
                    p = p->lc;
                }else
                {
                    p=s.top();
                    s.pop();
                    cout<<p->data<<endl;
                    r=p;            //记录最近访问的节点
                    p=NULL;            //节点访问完之后,重置p指针,目的是为了防止再次将左孩子压栈
                }
            }
        }
        return depth;
    }
  • 相关阅读:
    oracle 删除表中重复数据留一条
    C# 特性
    oracle 常用简单命令语句
    2017年学习计划
    java web开发基础学习
    Java Axis2支持json
    java基础教程
    axis2 发布webservice
    孤荷凌寒自学python第103天认识区块链017
    孤荷凌寒自学python第102天认识区块链016
  • 原文地址:https://www.cnblogs.com/houjun/p/4859866.html
Copyright © 2011-2022 走看看