Leetcode[222]-Count Complete Tree Nodes
2015-06-11 13:24
519 查看
Given a complete binary tree, count the number of nodes.
Definition of a complete binary tree from Wikipedia:
In a complete binary tree every level, except possibly the last, is completely filled, and all nodes in the last level are as far left as possible. It can have between 1 and 2h nodes inclusive at the last level h.
思路:分别计算左右子树,然后返回左右字数节点个数加一
递归法:(超时了)
方法二:
先计算左右的深度是否相等,相等则为满二叉树,满二叉树的节点个数为深度的平方减一,即depth^2-1;如果不相等,则递归以同样的方式计算左子树和右子树,并返回两者个数之和加一。
Code(c++):
Definition of a complete binary tree from Wikipedia:
In a complete binary tree every level, except possibly the last, is completely filled, and all nodes in the last level are as far left as possible. It can have between 1 and 2h nodes inclusive at the last level h.
思路:分别计算左右子树,然后返回左右字数节点个数加一
递归法:(超时了)
class Solution { public: int countNodes(TreeNode* root) { if(root == NULL) return 0; int lcount=0,rcount=0; if(root->left != NULL){ lcount = countNodes(root->left); } if(root->right != NULL){ rcount = countNodes(root->right); } return lcount+rcount+1; } };
方法二:
先计算左右的深度是否相等,相等则为满二叉树,满二叉树的节点个数为深度的平方减一,即depth^2-1;如果不相等,则递归以同样的方式计算左子树和右子树,并返回两者个数之和加一。
Code(c++):
/** * Definition for a binary tree node. * struct TreeNode { * int val; * TreeNode *left; * TreeNode *right; * TreeNode(int x) : val(x), left(NULL), right(NULL) {} * }; */ class Solution { public: int countNodes(TreeNode* root) { if(root == NULL) return 0; int ldepth = getLeftDepth(root); int rdepth = getRightDepth(root); //return the square of leftdepth -1 if(ldepth == rdepth) return (1 << ldepth) - 1; return countNodes(root->left)+countNodes(root->right)+1; } //compute the depth of left tree int getLeftDepth(TreeNode *root){ int depth = 0; while(root){ depth++; root = root->left; } return depth; } //compute the depth of right tree int getRightDepth(TreeNode *root){ int depth = 0; while(root){ depth++; root = root->right; } return depth; } };
相关文章推荐
- node.js 标准/错误输出 和 process.exit
- nodejs模块加载机制
- win7下安装node及出现的npm问题
- LeetCode 之 Reverse Nodes in k-Group — C 实现
- LeetCode 之 Swap Nodes in Pairs — C 实现
- 学习nodejs——callback, async i/o
- 【Leetcode Algorithm】Remove Nth Node From End of List
- Ubuntu 11.10 H3C iNode 客户端安装
- ERROR: Can't get master address from ZooKeeper; znode data == null
- leetcode之Count Complete Tree Nodes
- 推荐15个 Node.js 开发工具
- Format aborted in 格式化namenode 失败的原因
- [LeetCode] Count Complete Tree Nodes 求完全二叉树的节点个数
- Count Complete Tree Nodes
- Swap Nodes in Pairs
- mac平台下面nodejs环境搭配
- Leetcode[19]-Remove Nth Node From End of List
- nodejs全局变量
- nodejs supervisor
- nodejs 运行