• LeetCode222 判断是否为完全二叉树并求节点个数


    给出一个完全二叉树,求出该树的节点个数。

    说明:

    完全二叉树的定义如下:在完全二叉树中,除了最底层节点可能没填满外,其余每层节点数都达到最大值,并且最下面一层的节点都集中在该层最左边的若干位置。若最底层为第 h 层,则该层包含 1~ 2h 个节点。

    示例:

    输入: 
        1
       / 
      2   3
     /   /
    4  5 6
    
    输出: 6




    /**
     * Definition for a binary tree node.
     * struct TreeNode {
     *     int val;
     *     TreeNode *left;
     *     TreeNode *right;
     *     TreeNode(int x) : val(x), left(NULL), right(NULL) {}
     * };
     */
    /*
    算法思想:
        递归的方法,思路是分别找出以当前节点为根节点的左子树和右子树的高度并对比,如果相等,则说明是满二叉树,直接返回节点个数,即2的h次方-1,h为该满二叉树的高度。如果不相等,则节点个数为左子树的节点个数加上右子树的节点个数再加1(根节点),其中左右子树节点个数的计算可以使用递归来计算。
    */
    //算法实现:
    
    class Solution {
    public:
        int countNodes(TreeNode* root) {
            int hLeft = 0, hRight = 0;
            TreeNode *pLeft = root, *pRight = root;
            while (pLeft) {     //左子树高度
                ++hLeft;
                pLeft = pLeft->left;
            }
            while (pRight) {    //右子树高度
                ++hRight;
                pRight = pRight->right;
            }
            if (hLeft == hRight)    //满二叉树
                return pow(2, hLeft) - 1;
            return countNodes(root->left) + countNodes(root->right) + 1;
        }
    };

    给定一个二叉树,判断是否为完全二叉树。

    //给定一个二叉树,判断是否为完全二叉树。
    /*
    算法实现:
        采用层次遍历。将所有节点加入队列,包括空结点,当遇到空结点时,判断它之后的结点是否为空,若不为空,则不是完全二叉树。
    */
    //算法实现:
    bool iscompTree(TreeNode *root){
        if(!root)
            return true;
        TreeNode *p=root;
        queue<TreeNode*>q;
        q.push(p);
        while(!q.empty()){
            p=q.front();
            q.pop();
            if(p){  //结点非空,则左右子树入队
                q.push(p->left);
                q.push(p->right);
            }
            else{  //结点为空,若之后的结点不为空,则不是完全二叉树
                while(!q.empty()){
                    p=q.front();
                    q.pop();
                    if(!p)
                        return false;
                }
            }
        }
        return true;
    }
  • 相关阅读:
    [转]如何分析监控的关键指标
    性能测试指标&说明 [解释的灰常清楚哦!!]
    页面性能测试&提升方式
    转:使用 JMeter 完成常用的压力测试
    细雨学习笔记:JMeter 的主要测试组件总结
    压力测试了解
    影响性能的因素
    网址收藏
    Windows安装TensorFlow
    ionic常见问题及解决方案
  • 原文地址:https://www.cnblogs.com/parzulpan/p/10105662.html
Copyright © 2020-2023  润新知