zoukankan      html  css  js  c++  java
  • 面试题39:二叉树的深度

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

    二叉树的节点定义如下:

    struct TreeNode
    {
         int val;
         TreeNode* left;
         TreeNode* right;
    };

    例如,下图中二叉树的深度为4.

    1  int depthOfTree(TreeNode* root) {
    2         if ( root == NULL )
    3             return 0;
    4         else
    5             return 1+max(depthOfTree(root->left), depthOfTree(root->right));
    6     }

    题目二:输入一棵二叉树的根节点,判断该树是不是平衡二叉树。

    解法一:需要重复遍历节点多次,简单但不足以打动面试官

    利用题目一依次计算计算每个节点的深度。

    1  bool isBalanced(TreeNode* root) {
    2         if ( root == NULL )
    3          return true;       
    4          if ( abs(depthOfTree(root->left)-depthOfTree(root->right)) > 1 )
    5              return false;
    6          else
    7              return isBalanced( root->left ) && isBalanced( root->right );
    8     }

     解法二:一边遍历一边记录节点深度

     1 bool isBalanced(TreeNode* root, int & depth)
     2     {
     3         if (root == NULL)
     4         {
     5             depth = 0;
     6             return true;
     7         }
     8         int left, right;
     9         if (isBalanced(root->left, left) && isBalanced(root->right,right))
    10         {
    11             if (abs(left-right)<=1)
    12             {
    13                 depth = max(left,right)+1;
    14                 return true;
    15             }
    16         }
    17         return false;
    18     }
    19     bool isBalanced(TreeNode* root) {
    20         int depth = 0;
    21         return isBalanced(root, depth);
    22     }
  • 相关阅读:
    装饰器
    FLASK
    Flask第一个实例
    各种各样的PyQt测试和例子
    项目实战:天气信息查询
    窗口设置、QSS
    槽和信号
    布局
    打印机
    菜单栏、工具栏、状态栏
  • 原文地址:https://www.cnblogs.com/happygirl-zjj/p/4624840.html
Copyright © 2011-2022 走看看