题目
给你一棵二叉树的根节点 root
,翻转这棵二叉树,并返回其根节点。
我的思路
借鉴了对称二叉树的思想,用递归,原树的左子树就是新树的右子树,但是提交没有通过
* TreeNode left;
* TreeNode right;
* TreeNode() {}
* TreeNode(int val) { this.val = val; }
* TreeNode(int val, TreeNode left, TreeNode right) {
* this.val = val;
* this.left = left;
* this.right = right;
* }
* }
*/
class Solution {
public TreeNode invertTree(TreeNode root) {
TreeNode res = new TreeNode();
if(root!=null)
{
while(root!=null)
{
res.val=root.val;
res.left=root.right;
invertTree(root.right);
res.right=root.left;
invertTree(root.left);
}
return res;
}
else
{
return root;
}
}
}
题解
利用递归,思想很简单
显然,我们从根节点开始,递归地对树进行遍历,并从叶子节点先开始翻转。如果当前遍历到的节点 root 的左右两棵子树都已经翻转,那么我们只需要交换两棵子树的位置,即可完成以 root 为根节点的整棵子树的翻转。
class Solution {
public TreeNode invertTree(TreeNode root) {
if (root == null) {
return null;
}
TreeNode left = invertTree(root.left);
TreeNode right = invertTree(root.right);
root.left = right;
root.right = left;
return root;
}
}