博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
leetcode----222. Count Complete Tree Nodes
阅读量:4113 次
发布时间:2019-05-25

本文共 1451 字,大约阅读时间需要 4 分钟。

链接:

大意:

给定一棵完全二叉树,求二叉树的节点数。例子:

思路:

任意一种遍历方法都可以解决。

代码:

class Solution {    // 以任意一种遍历方法得到节点数    private int count = 0;    public int countNodes(TreeNode root) {        preOrder(root);        return count;    }    public void preOrder(TreeNode root) {        if (root == null)            return ;        count++;        preOrder(root.left);        preOrder(root.right);    }}

结果:

结论:

这种解法是对于任何树都适用的。对于完全二叉树,根据其不同于一般树的性质,应该是有另外更高效的解法的。(不过这种“不太高效”的方法也能打败100%,应该是测试用例太少了。。。) 

改进:

通过完全二叉树不同于一般二叉树的特性,可以计算出树的高度h以及最后一层的节点数order,然后返回 order + 2 ^ (h - 1) - 1即可。

class Solution {    private int order = -1; // 记录最后一个节点在其所在层的序号    public int countNodes(TreeNode root) {        int h = getHeight(root);        if (h == 0)            return 0;        getCountLastLayer(root, 1, h, 1);        return order + (1 << (h - 1)) - 1;    }    // 获得树的高度    public int getHeight(TreeNode root) {        if (root == null)            return 0;        return 1 + getHeight(root.left);    }    // 获得最后一个节点在其所在层的序号(即可知最后一层有多少个节点) num为当前节点在所在层的序号    public void getCountLastLayer(TreeNode root, int num, int h, int currLayer) {        if (currLayer == h) {            order = num;            return ;        }        if (root.right != null)            getCountLastLayer(root.right, num * 2, h, currLayer + 1);        if (order != -1) // 找到最后一个节点 直接return            return ;        if (root.left != null)            getCountLastLayer(root.left, num * 2 - 1, h, currLayer + 1);    }}

 

转载地址:http://vaesi.baihongyu.com/

你可能感兴趣的文章
微信小程序中使用npm过程中提示:npm WARN saveError ENOENT: no such file or directory
查看>>
Xcode 11 报错,提示libstdc++.6 缺失,解决方案
查看>>
idea的安装以及简单使用
查看>>
Windows mysql 安装
查看>>
python循环语句与C语言的区别
查看>>
Vue项目中使用img图片和background背景图的使用方法
查看>>
vue 项目中图片选择路径位置static 或 assets区别
查看>>
vue项目打包后无法运行报错空白页面
查看>>
Vue 解决部署到服务器后或者build之后Element UI图标不显示问题(404错误)
查看>>
element-ui全局自定义主题
查看>>
facebook库runtime.js
查看>>
vue2.* 中 使用socket.io
查看>>
openlayers安装引用
查看>>
js报错显示subString/subStr is not a function
查看>>
高德地图js API实现鼠标悬浮于点标记时弹出信息窗体显示详情,点击点标记放大地图操作
查看>>
初始化VUE项目报错
查看>>
vue项目使用安装sass
查看>>
HTTP和HttpServletRequest 要点
查看>>
在osg场景中使用GLSL语言——一个例子
查看>>
关于无线PCB中 中50欧姆的特性阻抗的注意事项
查看>>