BM35 判断是不是完全二叉树

思路:
判断一个二叉树是不是完全二叉树,先弄清楚二叉树的定义,只有最后一层和倒数第一层有叶子结点,也就是说当访问到空节点时,后面不应该再有节点可访问了。即空节点一定是在最后一层,并且空节点后面无节点。
采用层次遍历。用一个数组保存节点,用一个下标标记当前已经访问到的位置。
 

Go

 
package main

import . "nc_tools"
/*
* type TreeNode struct {
* Val int
* Left *TreeNode
* Right *TreeNode
* }
*/


/**
* 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
*
*
* @param root TreeNode类
* @return bool布尔型
*/
func isCompleteTree( root *TreeNode ) bool {
// write code here
if root == nil{
return true
}

res := true
queue := make([]*TreeNode,1)
queue[0] = root
flag := true
i := 0
for i< len(queue){
top := queue[i]
i++
if top.Left == nil{
flag = false
}else{
queue = append(queue,top.Left)
res = res && flag
}
if top.Right == nil{
flag = false
}else{
queue = append(queue,top.Right)
res = res && flag
}
if res == false{
return res
}
}
return true
}
 

C++

 
/**
* struct TreeNode {
* int val;
* struct TreeNode *left;
* struct TreeNode *right;
* TreeNode(int x) : val(x), left(nullptr), right(nullptr) {}
* };
*/
class Solution {
public:
/**
* 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
*
*
* @param root TreeNode类
* @return bool布尔型
*/
bool isCompleteTree(TreeNode* root) {
// write code here
if(root == nullptr){
return true;
}
bool flag = true;
bool res = true;
queue<TreeNode*> q;
q.push(root);
while(q.size() > 0){
TreeNode* top = q.front();
q.pop();
if(top->left == nullptr){
flag = false;
}else{
q.push(top->left);
res = res && flag;
}
if(top->right == nullptr){
flag = false;
}else{
q.push(top->right);
res = res && flag;
}
if(res == false){
return false;
}
}
return true;
}
};
posted @   重新出发123  阅读(25)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
· C#/.NET/.NET Core优秀项目和框架2025年2月简报
· DeepSeek在M芯片Mac上本地化部署
· 葡萄城 AI 搜索升级:DeepSeek 加持,客户体验更智能
点击右上角即可分享
微信分享提示