二叉树——判断一棵树是否是完全二叉树

二叉树按层遍历

判断条件:结点的左右孩子只有4种情况

其中的三种情况有特例

条件1.结点有右孩子,没有左孩子,直接返回false

条件2.结点左右孩子不全(有左没右,左右都没有),则后面遇到的所有结点,都必须是叶节点

只要不违反1.2的,就是完全二叉树

原文地址:https://www.cnblogs.com/SkyeAngel/p/8947531.html

时间: 2024-10-05 05:04:55

二叉树——判断一棵树是否是完全二叉树的相关文章

判断一棵树是否为完全二叉树

完全二叉树:若一棵二叉树具有具有n个节点,它的每个节点都与高度为k的满二叉树编号为0~n-1结点一一对应,则称这可二叉树为完全二叉树. 方法一:一维数组存储 根据完全二叉树的定义和性质,利用一位数组作为完全二叉树的存储,如下图 由图,节点的编号与数组元素的下标是一一对应的,可根据二叉树的性质,可方便找出下标 为i的的双亲结点a[i/2]及左右孩子结点a[i*2],a[i*2+1].这样判断一棵树是否为二叉树,应该对此二叉树从上到下,从左到右依次编号, 然后把编好的号依次存入一位数组中,在与相应深

1、如何判断一棵树是否是完全二叉树?

思路:通过树的层序遍历进行判断.结点入队时,当出现一个结点的孩子结点为空时,则之后就不能有新的结点入队. 若没有,则是完全二叉树,否则不是完全二叉树. 层序遍历代码: int after = 1;//表示还有结点入队 bool isComplete = true; void layerOrder(Node* root) { queue<Node*> Q; Q.push(root); while (!Q.empty()) { Node* front = Q.front(); Q.pop(); l

二叉树——判断一棵树是否是平衡二叉树

平衡二叉树 (空树或者左右两个孩子高度差不超过1) 在涉及到二叉树的题目时,递归函数非常好用 列出可能性->整理出返回值的类型->整个递归过程按照同样的结构得到子树的信息,整合子树的信息,加工出应该返回的信息,向上返回 1.左子树是否平衡 2.右子树是否平衡 3.左子树的高度 4.右子树的高度 根据可能性,使用递归函数 可能性->返回值的类型 //列出可能性 左右子树是否分别平衡,若平衡后,左右子树的高度 public static class ReturnData{ boolean i

判断一棵树是否是二叉搜索树

前两天写过一篇博文<二叉搜索树基本操作实现>,为了更深入了解二叉搜索树的性质,本文实现判断一棵树是否为二叉搜索树算法. 二叉搜索树的性质: 任意节点的键值一定大于其左子树中的每一个节点的键值,并小于其右子树中的每一个节点的键值. 构造二叉树的节点定义为: struct TreeNode{ int data; TreeNode *left; TreeNode *right; }; 方法1 (错误) 对每一个节点,检测其值是否大于左子树节点,是否小于右子树节点.思路很简单,代码实现如下: bool

判断一棵树是否为二叉搜索树(二叉排序树) python

输入一棵树,判断这棵树是否为二叉搜索树.首先要知道什么是排序二叉树,二叉排序树是这样定义的,二叉排序树或者是一棵空树,或者是具有下列性质的二叉树: (1)若左子树不空,则左子树上所有结点的值均小于它的根结点的值: (2)若右子树不空,则右子树上所有结点的值均大于它的根结点的值: (3)左.右子树也分别为二叉排序树: (4)没有键值相等的节点 #方法1,直接判断 直接判断的关键在于不能只是单纯地判断根.左.右三个节点的大小关系,左子树的右节点不仅要大于父节点,还要小于父节点的父节点,右子树的左节点

【LeetCode】Symmetric Tree 判断一棵树是否是镜像的

题目:Symmetric Tree <span style="font-size:18px;">/**LeetCode Symmetric Tree 对称的树 * 思路:判断一棵树是否对称,1.有左子树就要有右子树 * 2.除根节点外对称节点值要相同 * 注意:对称后就是左子树的左节点和右子树的右节点比较 * Definition for binary tree * public class TreeNode { * int val; * TreeNode left; *

判断一棵树是否是另一棵树的子树

问题 判断一棵树是否是另一棵树的子树,如图 思路 问题分两步: 找值相同的根结点(遍历解决) 判断两结点是否包含(递归:值.左孩子.右孩子分别相同) 代码 bool IsPart(TreeNode *root1, TreeNode *root2) { if (root2 == NULL) return true; if (root1 == NULL) return false; if (root1->val != root2->val) return false; return IsPart(

判断一棵二叉树是否为BST,一棵树是否为完全二叉树

对于一颗搜索二叉树,最简单的方法就是用中序遍历,看是不是一个递增数列,如果是则是一颗搜索二叉树,如果不是则不是搜索二叉树.在这里用一个lastVisit去记录上一次搜索到的节点.整个过程就是先找到最左下角的节点,更新这个lastVisit为这个节点的值,然后按照中序遍历依次更新即可.代码如下. 1 #include <stdio.h> 2 #include <climits> 3 4 //二叉树结点 5 typedef struct binary_tree_node_t{ 6 bi

判断一棵树是否是二叉平衡树

主要就是判断二叉树深度进行改造.判断条件为左树为平衡树,右树为平衡树,并且左树的高度和右树的高度插不超过-1:public class IsAVL { public static class Node{ private Node left; private Node right; private int value; public Node(int value){ this.value = value; } } public static int isAVL(Node head){ if(hea