首页 > 其他分享 >BM35 判断是不是完全二叉树

BM35 判断是不是完全二叉树

时间:2023-02-03 17:13:34浏览次数:58  
标签: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

相关文章

  • 二叉树的遍历
    二叉树的遍历一、二叉树的遍历算法可以将二叉树的遍历分为:先序遍历(根、左、右),中序遍历(左、根、右),后序遍历(左、右、根)先序遍历动画(根、左、右)中序遍历......
  • BM26 求二叉树的层序遍历
    思路:逐层访问,通过访问当前层来得到下一层的节点。结束标志是下一层没有节点。Gopackagemainimport."nc_tools"/**typeTreeNodestruct{*Valint*Left......
  • 小白科普丨何为树、二叉树和森林?
    摘要:本文为大家带来树、二叉树和森林的表示及如何进行相互转换。本文分享自华为云社区《树、二叉树和森林的表示及相互转换》,作者:1+1=王。树的基本概念树的定义:树是n(n......
  • 【DFS】LeetCode 105. 从前序与中序遍历序列构造二叉树
    题目链接105.从前序与中序遍历序列构造二叉树思路先序遍历的顺序是根左右,中序遍历的顺序是左根右,所以在preorder数组中的首元素一定是当前树的树根,再从inorder数组......
  • BM34 判断是不是二叉搜索树
    思路:对于这种dfs思想的算法,分三步走:先判断空节点再判断左子树和右子树根据左子树和右子树返回的信息以及当前节点的信息,返回最终的结果这里有一个技巧:用一个全局变......
  • 【DFS】LeetCode 236. 二叉树的最近公共祖先
    题目链接236.二叉树的最近公共祖先思路代码classSolution{publicTreeNodelowestCommonAncestor(TreeNoderoot,TreeNodep,TreeNodeq){if(roo......
  • uva839 (二叉树+递归)
    题目链接:​​点击这里​​题目大意就是根据干杠平衡原理,判断题目所给出的数据组成的天平能否平衡。注意,此天平可能包含子天平。输入时,如果w为0,则表示包含子天平,子天平按照......
  • 力扣654 最大二叉树
    题目:给定一个不重复的整数数组nums。最大二叉树可以用下面的算法从nums递归地构建:创建一个根节点,其值为nums中的最大值。递归地在最大值左边的子......
  • 力扣106 从中序与后序遍历序列构造二叉树
    题目:给定两个整数数组inorder和postorder,其中inorder是二叉树的中序遍历,postorder是同一棵树的后序遍历,请你构造并返回这颗二叉树。示例:输入:inorder=[9......
  • 二叉树的不同形态
    题目简介给定二叉树T(树深度H<=10,深度从1开始,结点个数N<1024,结点编号1~N)的层次遍历序列和中序遍历序列,输出T从左向右叶子结点以及二叉树先序和后序遍历序列。输入格式输......