-
题目描述
翻转一棵二叉树。 示例: 输入: 4 / \ 2 7 / \ / \ 1 3 6 9 输出: 4 / \ 7 2 / \ / \ 9 6 3 1 -
递归版本:首先对根节点的左右节点进行反转,然后在对左右子树进行反转。
/** * Definition for a binary tree node. * public class TreeNode { * int val; * TreeNode left; * TreeNode right; * TreeNode(int x) { val = x; } * } */ class Solution { public TreeNode invertTree(TreeNode root) { if (root == null) { return null; } if (root.left == null && root.right == null) { return root; } // 对根节点的左右节点进行反转 TreeNode temp = root.left; root.left = root.right; root.right = temp; // 反转左子树 if (root.left != null) { invertTree(root.left); } // 反转右子树 if (root.right != null) { invertTree(root.right); } return root; } } -
非递归版本:通过层次遍历每个节点并对每个节点的左右子节点进行反转。
/** * Definition for a binary tree node. * public class TreeNode { * int val; * TreeNode left; * TreeNode right; * TreeNode(int x) { val = x; } * } */ class Solution { public TreeNode invertTree(TreeNode root) { if (root == null) { return null; } if (root.left == null && root.right == null) { return root; } // 层次遍历二叉树并对遍历到的每个节点的左右节点进行反转 ArrayDeque<TreeNode> queue = new ArrayDeque<>(); queue.offerLast(root); while (!queue.isEmpty()) { TreeNode node = queue.pollFirst(); TreeNode temp = node.left; node.left = node.right; node.right = temp; if (node.left != null) { queue.offerLast(node.left); } if (node.right != null) { queue.offerLast(node.right); } } return root; } }
本文标题:leetcode 226. 翻转二叉树(递归与非递归)
本文链接:https://blog.quwenai.cn/post/3262.html
版权声明:本文不使用任何协议授权,您可以任何形式自由转载或使用。






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