226. 翻转二叉树
题目
给你一棵二叉树的根节点 root ,翻转这棵二叉树,并返回其根节点。
解题思路
DFS 广度有限搜索
层序遍历二叉树,遍历过程中交换左右子树
代码
/*** Definition for a binary tree node.* struct TreeNode {* int val;* struct TreeNode *left;* struct TreeNode *right;* };*//* DFS 广度有限搜索 层序遍历二叉树,遍历过程中交换左右子树 */
struct TreeNode* invertTree(struct TreeNode* root) {if(root == NULL){return root;}/* 初始化数组,用于存放当前遍历层的节点 */struct TreeNode** queue = (struct TreeNode**) malloc(sizeof(struct TreeNode*) * 100);int top = 0, rear = 0;// 根节点入队queue[rear++] = root;while(top != rear){// 获得当前遍历层的节点个数int count = rear - top;// 对当前层的每个节点进行遍历,执行交换左右子树操作while(count > 0){// 节点出队struct TreeNode* cur = queue[top++];/* 交换左右子树 */if(cur->left != NULL || cur->right != NULL){struct TreeNode* temp = cur->left;cur->left = cur->right;cur->right = temp;}/* 下一层节点入队 */if(cur->left != NULL){queue[rear++] = cur->left;}if(cur->right != NULL){queue[rear++] = cur->right;}count--;}}free(queue);return root;}