翻转二叉树题目如下:

这道题有很多方法,大致步骤就是在遍历时将左右孩子交换即可。
这里用了前序遍历:
class Solution {
public TreeNode invertTree(TreeNode root) {
//使用前序遍历时交换左右孩子
Stack<TreeNode> stack = new Stack<>();
if(root != null) stack.push(root);
while(!stack.isEmpty()){
TreeNode node = stack.peek();
stack.pop();
TreeNode temp = null;
if(node.left != null || node.right != null){
temp = node.left;
node.left = node.right;
node.right = temp;
}
if(node.right != null) stack.push(node.right);
if(node.left != null) stack.push(node.left);
}
return root;
}
}
对称二叉树题目如下:

使用递归法比较容易理解,检查是否轴对称就是看两边的子树是否对称(即最外侧节点是否相等,最内侧节点是否相等)。使用递归就按照递归三要素:确定递归函数的输入参数和返回值;递归终止的条件;单层递归的逻辑。
class Solution {
public boolean isSymmetric(TreeNode root) {
//使用递归法
return compare(root.left, root.right);
}
//定义递归函数
public boolean compare(TreeNode left, TreeNode right){
//判断左右节点的情况
if(left == null && right != null) return false;
if(left != null && right == null) return false;
if(left == null && right == null) return true;
if(left.val != right.val) return false;
//比较外侧
boolean compareOutiside = compare(left.left, right.right);
//比较内侧
boolean compareInner = compare(left.right, right.left);
return compareOutiside && compareInner;
}
}
397

被折叠的 条评论
为什么被折叠?



