【LeetCode刷题笔记(六十三)】之 226. 翻转二叉树

阳光穿透心脏的1/2处 2023-10-07 15:18 76阅读 0赞

本文章由公号【开发小鸽】发布!欢迎关注!!!

老规矩–妹妹镇楼:

20200721223424816.JPG

一. 题目

(一) 题干

翻转一颗二叉树。

(二) 示例

示例:

  1. 输入:
  2. 4
  3. / \
  4. 2 7
  5. / \ / \
  6. 1 3 6 9
  7. 输出:
  8. 4
  9. / \
  10. 7 2
  11. / \ / \
  12. 9 6 3 1

二. 题解

(一) 思路

关于二叉树的问题,第一种思路当然是递归,即深度优先搜索。递归的终止条件是当前的节点为null则返回null,非空的话当前节点的左节点就是之前右节点的递归结果,当前节点的右节点就是之前左节点的递归结果。

第二种思路是广度优先搜索,将每一层中的数都取出来,再一个一个地迭代,交换左右节点。由于广度优先搜索是按照顺序处理的,是先进先出的顺序,这就需要队列了,首先将根节点放入队列中,然后将队列中的每个节点的子节点都放入队列中,一个一个地交换左右子树。队列会按照每一层节点的顺序一个个地处理,这种方法用的是迭代的思想。

(二) 代码实现

Java:

1. 递归
  1. /**
  2. * Definition for a binary tree node.
  3. * public class TreeNode {
  4. * int val;
  5. * TreeNode left;
  6. * TreeNode right;
  7. * TreeNode(int x) { val = x; }
  8. * }
  9. */
  10. class Solution {
  11. public TreeNode invertTree(TreeNode root) {
  12. return dfs(root);
  13. }
  14. public TreeNode dfs(TreeNode root){
  15. if(root == null){
  16. return null;
  17. }
  18. TreeNode temp = root.left;
  19. root.left = dfs(root.right);
  20. root.right = dfs(temp);
  21. return root;
  22. }
  23. }
2. 迭代
  1. public TreeNode inverTree(TreeNode root){
  2. if(root == null){
  3. return null;
  4. }
  5. LinkedList<TreeNode> queue = new LinkedList<TreeNode>();
  6. queue.add(root);
  7. while(!queue.isEmpty()){
  8. TreeNode tmp = queue.poll();
  9. TreeNode left = tmp.left;
  10. tmp.left = tmp.right;
  11. tmp.right = left;
  12. if(tmp.left != null){
  13. queue.add(tmp.left);
  14. }
  15. if(tmp.right != null){
  16. queue.add(tmp.right);
  17. }
  18. }
  19. return root;
  20. }

发表评论

表情:
评论列表 (有 0 条评论,76人围观)

还没有评论,来说两句吧...

相关阅读

    相关 LeetCode226. 翻转

    今日份打卡力扣,这次用的是Java语言,之前都是用C/C++写的算法题,因为目前是从事Java开发方向,一会用C/C++,一会用Java,容易混淆,而且自己C++学的也不好,所