早安心语
听到别人生活不如意,就自我感觉良好;
见到他人晒幸福晒成绩,又觉得自己失败迷茫。
把时间都用来关注别人,哪还有功夫提升自己?
记住,你的注意力在哪里,成长就在哪里。
向着自己心中的愿景勇敢前进,踏实走好每一步,终有一天生活会垂青于你。
给定一个二叉树,确定它是否是一个完全二叉树。
思考 60秒 。。。
思考 60秒 。。
这个题目从画图开始。
算法五个重要的特征:
输入:[1,2,3,4,5,null,7] 输出:false 解释:值为 7 的结点没有尽可能靠向左侧
编号是7,tree的中长度为7。
这样能够做2×index会越界。
从节点2从单个角度看,是合法的,不能保证整个tree都是合法的。
算法描述:
2个递归,浪费空间还是挺大的。
class Solution {public:bool isCompleteTree(TreeNode root) {
int count =getNode(root);
return isCompleteTree(root,1,count);
return isCompleteTree(root->left) && isCompleteTree(root->right);
}
bool isCompleteTree(TreeNode* root,int index,int &count)
{
if (NULL == root)
{
return true;
}
if(index > count)
{
return false;
}
return isCompleteTree(root->left,2*index,count) && isCompleteTree(root->right,2*index+1,count);
}
int getNode(TreeNode* root)
{
if ( root ==NULL)
{
return 0;
}
return getNode(root->left) + getNode(root->right) +1;
}
/**958. Check Completeness of a Binary Tree
Definition for a binary tree node.
type TreeNode struct {
Val int
Left *TreeNode
Right *TreeNode
} */ func isCompleteTree(root *TreeNode) bool { if root == nil { return true } total := getNodes(root)
return isCompleteTreeByIndex(root, 1, total)
}
func getNodes(root *TreeNode) int {
if root == nil {
return 0
}
return 1 + getNodes(root.Left) + getNodes(root.Right)
}
func isCompleteTreeByIndex(root *TreeNode, index int, total int) bool {
if nil == root {
return true
}
if index > total {
return false
}
return isCompleteTreeByIndex(root.Left, 2*index, total) && isCompleteTreeByIndex(root.Right, 2*index+1, total)
}
分享最实用的经验 , 希望每一位来访的朋友都能有所收获! 如果有疑问请联系我,一起探讨,进步。