-
二叉树的镜像(JAVA)
操作给定的二叉树,将其变换为源二叉树的镜像。
数据范围:二叉树的节点数 0 \le n \le 10000≤n≤1000 , 二叉树每个节点的值 0\le val \le 10000≤val≤1000
要求: 空间复杂度 O(n)O(n) 。本题也有原地操作,即空间复杂度 O(1)O(1) 的解法,时间复杂度 O(n)O(n)
示例:
输入:{8,6,10,5,7,9,11}
输出:{8,10,6,11,9,7,5}
import java.util.*;
/*
* public class TreeNode {
* int val = 0;
* TreeNode left = null;
* TreeNode right = null;
* public TreeNode(int val) {
* this.val = val;
* }
* }
*/
public class Solution {
/**
* 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
*
*
* @param pRoot TreeNode类
* @return TreeNode类
*/
public TreeNode Mirror (TreeNode pRoot) {
// write code here
if (pRoot == null)
return null;
TreeNode left = Mirror(pRoot.left);
TreeNode right = Mirror(pRoot.right);
pRoot.left = right;
pRoot.right = left;
return pRoot;
}
}
个人理解:先递归最左端的节点,遇到空树返回,最左端的两个子节点交换位置;递归右子树,继续把最右端两个子节点交换位置;最后返回到根节点,交换根下两个子节点
-
对称的二叉树(JAVA)
给定一棵二叉树,判断其是否是自身的镜像(即:是否对称)
数据范围:节点数满足 0 \le n \le 10000≤n≤1000,节点上的值满足 |val| \le 1000∣val∣≤1000
要求:空间复杂度 O(n)O(n),时间复杂度 O(n)O(n)
示例:
输入:{1,2,2,3,4,4,3}
输出:true
输入:{8,6,9,5,7,7,5}
输出:false
import java.util.*;
/*
public class TreeNode {
int val = 0;
TreeNode left = null;
TreeNode right = null;
public TreeNode(int val) {
this.val = val;
}
}
*/
public class Solution {
boolean recursion(TreeNode root1, TreeNode root2) {
if(root1 == null && root2 == null)
return true;
if(root1 == null || root2 == null || root1.val != root2.val)
return false;
return recursion(root1.left, root2.right) && recursion(root1.right, root2.left);
}
boolean isSymmetrical(TreeNode pRoot){
return recursion(pRoot, pRoot);
}
}
个人理解:先“根左右”的顺序遍历,把二叉树的左右节点交换位置,按“根右左”的顺序遍历,结果一样则true,不一致则false