zoukankan      html  css  js  c++  java
  • LeetCode Count Complete Tree Nodes

    LeetCode Count Complete Tree Nodes

    题目

    这里写图片描写叙述

    思路

    这个树会灰常的大;
    先沿着左右两遍计算深度。假设深度一样直接代公式算。
    假设深度不一样。那就找最以下一层的断点。

    代码

    int maxD, num;
    
    int calDeepFromRight(struct TreeNode* root) {
        int ans = 0;
        while (root) {
            ans++;
            root = root->right;
        }
        return ans;
    }
    
    int calDeepFromLeft(struct TreeNode* root) {
        int ans = 0;
        while (root) {
            ans++;
            root = root->left;
        }
        return ans;
    }
    
    void findBreakPoint(struct TreeNode* root, int pos, int deep) {
        if (num != -1) return;
        if (root == NULL && deep == maxD) {
            num = 1;
            int base = 1;
            for (int i = 1; i < deep - 1; i++) num += (base *= 2);
            num += pos;
            return;
        }
        else {
            if (root == NULL) return;
            findBreakPoint(root->left, pos * 2, deep + 1);
            findBreakPoint(root->right, pos * 2 + 1, deep + 1);
        }
    }
    
    int countNodes(struct TreeNode* root) {
        int ld = calDeepFromLeft(root), rd = calDeepFromRight(root);
        maxD = ld;
        if (ld == rd) {
            if (ld == 0) return 0;
            int base = 1;
            num = 1;
            for (int i = 1; i < ld; i++) num += (base *= 2);
        }
        else {
            num = -1;
            findBreakPoint(root, 0, 1);
        }
        return num;
    }
  • 相关阅读:
    Winfrom Chart实现数据统计
    Python--面向过程编程
    老板喜欢什么样的员工
    python--装饰器
    python--浅拷贝和深拷贝
    Python基础-logging模块
    Python基础-subprocess模块
    Python基础-hashlib模块
    Python基础-ConfigParser模块
    Python基础-XML模块
  • 原文地址:https://www.cnblogs.com/mengfanrong/p/5093316.html
Copyright © 2011-2022 走看看