【算法】判断一颗二叉树是否是平衡二叉树

本文介绍了如何判断一棵二叉树是否为平衡二叉树,提供了C++实现的深度计算函数`DepthTree`和判断平衡的`isBalanceTree`,并通过创建随机二叉树进行测试。在测试中发现需要一个完全二叉树的测试样例,但目前尚未掌握创建完全二叉树的方法。

1.问题描述:

   判断一颗二叉树是否是平衡二叉树。

 

2.问题分析:

   平衡二叉树要求左子树和右子树的高度相差为1,且左右子树都是平衡二叉树,显然需要计算二叉树高度的函数。

 

3.代码:

 

 

4.测试:

 

 

在C语言中,判断一棵二叉树是否是完全二叉树,可以采用深度优先搜索(DFS)的方式逐层检查。一个二叉树是完全二叉树,如果每个层级都是满的,除了最后一层外,其余各层都尽可能地填满,且最后一层的所有节点都在最左边。 下面是一个简单的算法步骤: 1. 定义一个函数`isCompleteTree(root)`,该函数接收二叉树的根节点作为输入。 2. 对于每一层,计算当前层的实际节点数和最大节点数(如果是满的,应该是2^(layer+1)-1),两者相等则说明到这一层为止是完全二叉树。 3. 如果到达了最后一层,遍历剩余的节点,如果它们不是左孩子,那么这棵树就不是完全二叉树。 4. 递归地对左右子树进行同样的检查。 伪代码如下: ```c int isCompleteTree(Node* root) { if (root == NULL) return 1; // 空树视为完全二叉树 int layer = 0; int maxNodesInLayer = 1 << (layer + 1); // 计算当前层的最大节点数 Node* current = root; while (current != NULL) { ++layer; // 检查当前层是否有空位 if (current->left != NULL && current->right != NULL) { maxNodesInLayer <<= 1; } // 如果当前层的节点数小于最大节点数,不是完全二叉树 if (current->numChildren < maxNodesInLayer) break; current = current->left ? current->right : NULL; } // 检查剩余的节点是否全在左边 if (current != NULL) return 0; return isCompleteTree(root->left) && isCompleteTree(root->right); } ``` 其中,`Node`结构包含指向左右孩子的指针和一个表示子节点数量的变量`numChildren`。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值