• 二叉树的深度


    题目:输入一棵二叉树的根结点,求该树的深度。从根结点到叶结点依次经过的结点(含根、叶结点)形成树的一条路径,最长路径的长度为树的深度。

    例如:输入二叉树:

                                                10
                                              /    
                                            6        14
                                          /         /   
                                        4         12     16

    输出该树的深度3。

    二叉树的结点定义如下:

    struct SBinaryTreeNode // a node of the binary tree
    {
          int               m_nValue; // value of node
          SBinaryTreeNode  *m_pLeft;  // left child of node
          SBinaryTreeNode  *m_pRight; // right child of node
    };

    如果一棵树只有一个结点,它的深度为1。如果根结点只有左子树而没有右子树,那么树的深度应该是其左子树的深度加1;同样如果根结点只有右子树而没有左子树,那么树的深度应该是其右子树的深度加1。如果既有右子树又有左子树呢?那该树的深度就是其左、右子树深度的较大值再加1

    上面的这个思路用递归的方法很容易实现,只需要对遍历的代码稍作修改即可。参考代码如下:

    ///////////////////////////////////////////////////////////////////////
    // Get depth of a binary tree
    // Input: pTreeNode - the head of a binary tree
    // Output: the depth of a binary tree
    ///////////////////////////////////////////////////////////////////////
    int TreeDepth(SBinaryTreeNode *pTreeNode)
    {
          // the depth of a empty tree is 0
          if(!pTreeNode)
                return 0;
    
          // the depth of left sub-tree
          int nLeft = TreeDepth(pTreeNode->m_pLeft);
          // the depth of right sub-tree
          int nRight = TreeDepth(pTreeNode->m_pRight);
    
          // depth is the binary tree
          return (nLeft > nRight) ? (nLeft + 1) : (nRight + 1);
    }
    

    来源:http://zhedahht.blog.163.com/blog/static/25411174200732975328975/

  • 相关阅读:
    解析ASP.NET WebForm和Mvc开发的区别
    relink:在Linux/UNIX平台上relink Oracle软件(转)
    Java开发 Eclipse使用技巧(转)
    职场人生:情商
    RPC
    PLSQL Developer Debug
    uC/OS-III学习2::uC/OS-III LED闪烁实验
    Flex文件读取报错
    C++字节对齐问题
    写可測试的代码
  • 原文地址:https://www.cnblogs.com/heyonggang/p/3417760.html
Copyright © 2020-2023  润新知