本文主要是介绍222、求出完全二叉树的节点,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
给你一棵 完全二叉树 的根节点 root
,求出该树的节点个数。
完全二叉树 的定义如下:在完全二叉树中,除了最底层节点可能没填满外,其余每层节点数都达到最大值,并且最下面一层的节点都集中在该层最左边的若干位置。若最底层为第 h
层,则该层包含 1~ 2h
个节点。
题解:
1)层序遍历
2)可以利用完全二叉树的性质来做,完全二叉树只有两种情况,情况一:就是满二叉树,情况二:最后一层叶子节点没有满。
对于情况一,可以直接用 2^树深度 - 1 来计算,注意这里根节点深度为1。
对于情况二,分别递归左孩子,和右孩子,递归到某一深度一定会有左孩子或者右孩子为满二叉树,然后依然可以按照情况1来计算
class Solution {
public:int countNodes(TreeNode* root) {if(root==NULL) return 0;TreeNode* left = root->left;TreeNode* right = root->right;int LeftDepth = 0;int RightDepth = 0;while(left){left = left->left;LeftDepth++;}while(right){right = right->right;RightDepth++;}if(LeftDepth == RightDepth){return (2<<LeftDepth) - 1;}return countNodes(root-> right) + countNodes(root->left) + 1;}
};
注意:
要充分利用二叉树的特性,也就是对遍历过程中的两种情况的处理,理解完全二叉树中满二叉树的情况,理解每次递归中+1的叠加。
这篇关于222、求出完全二叉树的节点的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!