【手把手带你刷LeetCode】——17.翻转二叉树(DFS)

举报
安然无虞 发表于 2022/05/26 23:45:51 2022/05/26
【摘要】 【前言】 今天是力扣打卡第17天! emmm...突然不知道说啥,上菜吧。   原题:翻转二叉树 题目描述: 翻转一棵二叉树。 示例: 输入: 4 / \ 2 7 / \ / \ 1 3 6 9 输出: 4 / ...

【前言】

今天是力扣打卡第17天!

emmm...突然不知道说啥,上菜吧。

 

原题:翻转二叉树

题目描述:

翻转一棵二叉树。

示例:

输入:

     4
   /   \
  2     7
 / \   / \
1   3 6   9

输出:

     4
   /   \
  7     2
 / \   / \
9   6 3   1

题解:

方法一比较简单,都在代码里啦。

方法二:

这是一道很经典的二叉树问题。显然,我们从根节点开始,递归地对树进行遍历,并从叶子节点先开始翻转。如果当前遍历到的节点root 的左右两棵子树都已经翻转,那么我们只需要交换两棵子树的位置,即可完成以root 为根节点的整棵子树的翻转。

代码执行:


  
  1. /**
  2. * Definition for a binary tree node.
  3. * struct TreeNode {
  4. * int val;
  5. * struct TreeNode *left;
  6. * struct TreeNode *right;
  7. * };
  8. */
  9. struct TreeNode* invertTree(struct TreeNode* root){
  10. //方法一
  11. // //找边界
  12. // if(root == NULL){
  13. // return NULL;
  14. // }
  15. // //交换左右节点
  16. // struct TreeNode* temp;
  17. // temp = root->left;
  18. // root->left = root->right;
  19. // root->right = temp;
  20. // //交换左子树
  21. // invertTree(root->left);
  22. // //交换右子树
  23. // invertTree(root->right);
  24. // //函数返回时就表示当前这个节点,以及它的左右子树都已经交换完了
  25. // return root;
  26. //方法二
  27. if(root == NULL){
  28. return NULL;
  29. }
  30. //交换左子树节点
  31. struct TreeNode* left = invertTree(root->left);
  32. //交换右子树节点
  33. struct TreeNode* right = invertTree(root->right);
  34. //此时左右子树的节点都已经完成交换了,现在需要交换左右子树
  35. root->left = right;
  36. root->right = left;
  37. return root;
  38. }

结语

今天是力扣打卡第17天!

加油哦

文章来源: bit-runout.blog.csdn.net,作者:安然无虞,版权归原作者所有,如需转载,请联系作者。

原文链接:bit-runout.blog.csdn.net/article/details/121324915

【版权声明】本文为华为云社区用户转载文章,如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。