面试题目:(6)翻转二叉树

2024-08-21 18:52
文章标签 二叉树 面试 题目 翻转

本文主要是介绍面试题目:(6)翻转二叉树,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

题目

  • 翻转二叉树 (中间对称翻转,等于镜像)
  • 给你一棵二叉树的根节点 root ,翻转这棵二叉树,并返回其根节点。
  • 示例1:
    • 输入:root = [4,2,7,1,3,6,9]
    • 输出:[4,7,2,9,6,3,1]
  • 示例1:
    • 输入:root = [2,1,3]
    • 输出:[2,3,1]  
  • 示例1:
    • 输入:root = []
    • 输出:[]
  • 提示:
    • 树中节点数目范围在 [0, 100] 内
    • -100 <= Node.val <= 100
    • * struct TreeNode {
    • *     int val;
    • *     struct TreeNode *left;
    • *     struct TreeNode *right;
    • * };

代码

#include <stdio.h>
#include <stdlib.h>
#include <ctype.h>
#include <string.h>struct TreeNode {int val;struct TreeNode *left;struct TreeNode *right;
};
struct TreeNode * crete_node(int number)
{struct TreeNode *new_node = (struct TreeNode *)malloc(sizeof(struct TreeNode));new_node->val = number;new_node->left = NULL;new_node->right = NULL;return new_node;
}
struct TreeNode * add_tree(struct TreeNode *tree, int number, int count)
{struct TreeNode *new_node = crete_node(number);if (count == 1){tree = new_node;}else{struct TreeNode *current = tree;int position = count;// 找到插入位置,bufor (int i = 1; i < count / 2; i *= 2) {if (position & 1) {if (!current->right) {current->right = new_node;return tree;}current = current->right;} else {if (!current->left) {current->left = new_node;return tree;}current = current->left;}position >>= 1;}if (position & 1) {current->right = new_node;} else {current->left = new_node;}}return tree;}// 层序遍历打印二叉树
void printLevelOrder(struct TreeNode* root) {if (root == NULL) {printf("[]\n");return;}struct TreeNode* queue[100];int front = 0, rear = 0;queue[rear++] = root;printf("[");while (front < rear) {struct TreeNode* node = queue[front++];if (node) {printf("%d", node->val);if (node->left != NULL) queue[rear++] = node->left;if (node->right != NULL) queue[rear++] = node->right;}if (front < rear) printf(", ");}printf("]\n");
}void zhuan_list(struct TreeNode* root)
{if (root == NULL) return;struct TreeNode* temp = root->left;root->left = root->right;root->right = temp;zhuan_list(root->left);zhuan_list(root->right);
}
int main()
{char s[256] ="";printf("root = ");fgets(s,sizeof(s),stdin);s[strcspn(s, "\n")] = '\0';int number = 0;struct TreeNode *tree = NULL;int count = 1;for (int i = 0; i < strlen(s); i++){if (s[i]<= '9' && s[i] >= '0'){number = number * 10 +(s[i] - '0');}else if(s[i] == ',' || s[i] == ']'){tree = add_tree(tree,number,count);count++;number = 0;}}printLevelOrder(tree);zhuan_list(tree);printLevelOrder(tree);return 0;
}

解析

  • 接收字符串后去掉换行符
  • 遍历字符串,遇到数字保存,遇到",“和"]"就新建节点组成树
    • 组成树
      • 传入这是第几个节点,进行除于2来找到父节点
      • 通过二进制的最后一位数来决定是左子树还是右子树,一层一层的进入
      • 进入了下一层也就是进入了新节点,判断左子树是否为空先,在判断右子树,哪个为空就进哪一个
      • 但根节点下面的两个数字为2和3,都进入不了for循环,要单独通过最后一位来进行加载
  • 打印树
  • 翻转树
    • 递归函数翻转
      • 判断是否为空,为空退出
      • 将左右节点翻转
      • 再分别递归进入左右子树进行翻转

这篇关于面试题目:(6)翻转二叉树的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1094000

相关文章

字节面试 | 如何测试RocketMQ、RocketMQ?

字节面试:RocketMQ是怎么测试的呢? 答: 首先保证消息的消费正确、设计逆向用例,在验证消息内容为空等情况时的消费正确性; 推送大批量MQ,通过Admin控制台查看MQ消费的情况,是否出现消费假死、TPS是否正常等等问题。(上述都是临场发挥,但是RocketMQ真正的测试点,还真的需要探讨) 01 先了解RocketMQ 作为测试也是要简单了解RocketMQ。简单来说,就是一个分

秋招最新大模型算法面试,熬夜都要肝完它

💥大家在面试大模型LLM这个板块的时候,不知道面试完会不会复盘、总结,做笔记的习惯,这份大模型算法岗面试八股笔记也帮助不少人拿到过offer ✨对于面试大模型算法工程师会有一定的帮助,都附有完整答案,熬夜也要看完,祝大家一臂之力 这份《大模型算法工程师面试题》已经上传CSDN,还有完整版的大模型 AI 学习资料,朋友们如果需要可以微信扫描下方CSDN官方认证二维码免费领取【保证100%免费

题目1254:N皇后问题

题目1254:N皇后问题 时间限制:1 秒 内存限制:128 兆 特殊判题:否 题目描述: N皇后问题,即在N*N的方格棋盘内放置了N个皇后,使得它们不相互攻击(即任意2个皇后不允许处在同一排,同一列,也不允许处在同一斜线上。因为皇后可以直走,横走和斜走如下图)。 你的任务是,对于给定的N,求出有多少种合法的放置方法。输出N皇后问题所有不同的摆放情况个数。 输入

题目1380:lucky number

题目1380:lucky number 时间限制:3 秒 内存限制:3 兆 特殊判题:否 提交:2839 解决:300 题目描述: 每个人有自己的lucky number,小A也一样。不过他的lucky number定义不一样。他认为一个序列中某些数出现的次数为n的话,都是他的lucky number。但是,现在这个序列很大,他无法快速找到所有lucky number。既然

leetcode105 从前序与中序遍历序列构造二叉树

根据一棵树的前序遍历与中序遍历构造二叉树。 注意: 你可以假设树中没有重复的元素。 例如,给出 前序遍历 preorder = [3,9,20,15,7]中序遍历 inorder = [9,3,15,20,7] 返回如下的二叉树: 3/ \9 20/ \15 7   class Solution {public TreeNode buildTree(int[] pr

java面试常见问题之Hibernate总结

1  Hibernate的检索方式 Ø  导航对象图检索(根据已经加载的对象,导航到其他对象。) Ø  OID检索(按照对象的OID来检索对象。) Ø  HQL检索(使用面向对象的HQL查询语言。) Ø  QBC检索(使用QBC(Qurey By Criteria)API来检索对象。 QBC/QBE离线/在线) Ø  本地SQL检索(使用本地数据库的SQL查询语句。) 包括Hibern

【408数据结构】散列 (哈希)知识点集合复习考点题目

苏泽  “弃工从研”的路上很孤独,于是我记下了些许笔记相伴,希望能够帮助到大家    知识点 1. 散列查找 散列查找是一种高效的查找方法,它通过散列函数将关键字映射到数组的一个位置,从而实现快速查找。这种方法的时间复杂度平均为(

贝壳面试:什么是回表?什么是索引下推?

尼恩说在前面 在40岁老架构师 尼恩的读者交流群(50+)中,最近有小伙伴拿到了一线互联网企业如得物、阿里、滴滴、极兔、有赞、希音、百度、网易、美团的面试资格,遇到很多很重要的面试题: 1.谈谈你对MySQL 索引下推 的认识? 2.在MySQL中,索引下推 是如何实现的?请简述其工作原理。 3、说说什么是 回表,什么是 索引下推 ? 最近有小伙伴在面试 贝壳、soul,又遇到了相关的

PHP实现二叉树遍历(非递归方式,栈模拟实现)

二叉树定义是这样的:一棵非空的二叉树由根结点及左、右子树这三个基本部分组成,根据节点的访问位置不同有三种遍历方式: ① NLR:前序遍历(PreorderTraversal亦称(先序遍历)) ——访问结点的操作发生在遍历其左右子树之前。 ② LNR:中序遍历(InorderTraversal) ——访问结点的操作发生在遍历其左右子树之中(间)。 ③ LRN:后序遍历(PostorderT

毕业前第二次面试的感慨

距面试已经过去了有几天了,我现在想起来都有说多的恨感慨。 我一直都是想找刚刚起步的企业,因为这能让我学到更多的东西,然而正好有一家企业是刚起步的,而且他还有自己的产品专利,可以说这是一家,即是创业又是刚起步的公司,这家公司回复了我投给他的简历,这家企业想进一步了解我的情况,因为简历上我符合这家企业的基本要求,所以要进一步了解。 虽然面试的过程中,他给我的面试题,我做得并不是很理想,