标签:TreeNode BM35 res top 是不是 queue flag 二叉树 return
思路:
判断一个二叉树是不是完全二叉树,先弄清楚二叉树的定义,只有最后一层和倒数第一层有叶子结点,也就是说当访问到空节点时,后面不应该再有节点可访问了。即空节点一定是在最后一层,并且空节点后面无节点。
采用层次遍历。用一个数组保存节点,用一个下标标记当前已经访问到的位置。
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;
}
};
标签:TreeNode,
BM35,
res,
top,
是不是,
queue,
flag,
二叉树,
return
From: https://www.cnblogs.com/starter-songudi/p/17089881.html