链式存储判断一棵树完全二叉树
时间: 2023-12-27 11:25:32 浏览: 26
以下是判断一棵二叉树是否是完全二叉树的算法:
```python
def isCompleteTree(root):
if root is None:
return True
queue = [root]
flag = False
while queue:
node = queue.pop(0)
if node.left:
if flag:
return False
queue.append(node.left)
else:
flag = True
if node.right:
if flag:
return False
queue.append(node.right)
else:
flag = True
return True
```
相关问题
二叉树的链式存储初始化一棵树
二叉树的链式存储使用指针来表示树的结构,每个节点包括一个数据域和两个指针域,分别指向左子树和右子树。初始化一棵树需要创建根节点,并为根节点分配空间,然后递归地创建左子树和右子树。
下面是一个示例代码来初始化一棵二叉树:
```c
#include <stdio.h>
#include <stdlib.h>
typedef struct TreeNode {
int data;
struct TreeNode* left;
struct TreeNode* right;
} TreeNode;
// 创建一个新节点
TreeNode* createNode(int val) {
TreeNode* node = (TreeNode*)malloc(sizeof(TreeNode));
node->data = val;
node->left = NULL;
node->right = NULL;
return node;
}
// 初始化一棵树
TreeNode* initTree() {
TreeNode* root = createNode(1);
root->left = createNode(2);
root->right = createNode(3);
root->left->left = createNode(4);
root->left->right = createNode(5);
root->right->left = createNode(6);
root->right->right = createNode(7);
return root;
}
int main() {
TreeNode* root = initTree();
printf("根节点的数据为:%d\n", root->data);
printf("左子树的根节点数据为:%d\n", root->left->data);
printf("右子树的根节点数据为:%d\n", root->right->data);
return 0;
}
```
在上面的代码中,我们创建了一个名为 TreeNode 的结构体来表示二叉树的节点,其中包括一个数据域和两个指针域。createNode() 函数用来创建一个新节点,initTree() 函数用来初始化一棵树。在 main() 函数中,我们调用 initTree() 函数来初始化一棵树,并打印出根节点、左子树的根节点和右子树的根节点的数据。
二叉树链式存储结构
二叉树链式存储结构是指用指针来表示二叉树的存储结构。每个节点除了存储数据之外,还要存储指向其左子树和右子树的指针。具体来说,一个二叉树节点包含以下三个部分:
1. 节点数据;
2. 指向左子树的指针;
3. 指向右子树的指针。
如果一个节点没有左子树或右子树,对应的指针就指向 NULL。通过这种方式,可以构建出一棵任意形态的二叉树。
下面是一个二叉树链式存储结构的示例代码:
```c++
struct TreeNode {
int val;
TreeNode* left;
TreeNode* right;
TreeNode(int x) : val(x), left(NULL), right(NULL) {}
};
```
其中,`TreeNode` 结构体表示一个二叉树节点,`val` 表示节点的数据,`left` 和 `right` 分别表示指向左子树和右子树的指针。在创建一个二叉树时,只需要创建根节点,然后通过指针来链接其他节点即可。