C 语言:用 Queue 实现判断二叉树是否轴对称(附代码示例)
以下是使用 C 语言和队列来判断二叉树是否轴对称的示例代码: ```c #include <stdio.h> #include <stdlib.h> // 二叉树节点结构体 typedef struct TreeNode { int val; struct TreeNode *left; struct TreeNode *right; } TreeNode; // 创建新节点 TreeNode* createNode(int val) { TreeNode* newNode = (TreeNode*)malloc(sizeof(TreeNode)); newNode->val = val; newNode->left = NULL; newNode->right = NULL; return newNode; } // 判断二叉树是否轴对称 int isSymmetric(TreeNode* root) { if (root == NULL) { return 1; } // 创建两个队列 TreeNode queue1 = (TreeNode)malloc(sizeof(TreeNode*) * 1000); TreeNode queue2 = (TreeNode)malloc(sizeof(TreeNode*) * 1000); int front1 = 0, rear1 = 0; int front2 = 0, rear2 = 0; // 将根节点的左右子节点分别放入两个队列 queue1[rear1++] = root->left; queue2[rear2++] = root->right; while (front1 < rear1 && front2 < rear2) { TreeNode* node1 = queue1[front1++]; TreeNode* node2 = queue2[front2++]; // 如果两个节点都为空,继续 if (node1 == NULL && node2 == NULL) { continue; } // 如果其中一个为空,不对称 if ((node1 == NULL && node2!= NULL) || (node1!= NULL && node2 == NULL)) { free(queue1); free(queue2); return 0; } // 值不相等,不对称 if (node1->val!= node2->val) { free(queue1); free(queue2); return 0; } // 将左子树的左节点和右子树的右节点放入队列 1 queue1[rear1++] = node1->left; // 将右子树的左节点和左子树的右节点放入队列 2 queue2[rear2++] = node2->right; // 将左子树的右节点和右子树的左节点放入队列 1 queue1[rear1++] = node1->right; // 将右子树的右节点和左子树的左节点放入队列 2 queue2[rear2++] = node2->left; } free(queue1); free(queue2); // 遍历完队列都对称 return 1; } // 测试案例 int main() { // 构建测试二叉树 TreeNode* root = createNode(1); root->left = createNode(2); root->right = createNode(2); root->left->left = createNode(3); root->left->right = createNode(4); root->right->left = createNode(4); root->right->right = createNode(3); if (isSymmetric(root)) { printf("二叉树是轴对称的\n"); } else { printf("二叉树不是轴对称的\n"); } // 释放内存 free(root->left->left); free(root->left->right); free(root->left); free(root->right->left); free(root->right->right); free(root->right); free(root); return 0; } ``` ######[AI写代码神器 | 870点数解答 | 2024-09-12 21:22:21]
- Java实现链表反转:迭代与递归双解法详解及开发实战指南(DeepSeek | 1409点数解答 | 2026-03-15 15:09:29)57
- Python 实现球类:精准计算半径、表面积与体积,附输入验证与异常处理!(阿里通义 | 261点数解答 | 2024-11-28 21:19:39)371
- 探寻数组中最长摆动子序列长度:思路剖析与代码优化(GPT | 758点数解答 | 2024-12-23 23:18:29)286
- 独家剖析:求解数组最长摆动子序列长度的代码实现与改进建议(GPT | 350点数解答 | 2024-12-23 23:20:54)286
- JS 代码:判断“red”改值为“green”并弹窗显示结果( | 176点数解答 | 2024-05-20 21:33:04)431
- 用 JS 代码巧妙判断 a 与 b 关系:输出对应结果 ( | 47点数解答 | 2024-05-20 22:10:14)340
- Three.js 示例代码解析:优化场景渲染与注意要点(字节豆包 | 164点数解答 | 2025-02-27 23:30:20)283
- 51 单片机:定时器 0 实现 8 个 LED 循环点亮,附代码及优化建议(字节豆包 | 1193点数解答 | 2024-12-27 15:10:29)343
- Python 实现移位与仿射密码:精准加密解密及关键逻辑解析(字节豆包 | 798点数解答 | 2024-12-18 15:55:47)276
- C++ 实现:快速判断正整数是否为“超级整数”(字节豆包 | 239点数解答 | 2025-11-10 18:52:28)108
- C++实现:判断正整数是否为“超级整数”(字节豆包 | 242点数解答 | 2025-11-10 20:27:49)153
- 用 JS 中 for 循环实现 1 到 100 相加并输出结果到页面的完整代码 ( | 240点数解答 | 2024-05-20 22:11:29)494