思路
针对二叉树的问题,解题之前一定要想清楚究竟是前中后序遍历,还是层序遍历。
力扣题目 226.翻转二叉树
/**
* Definition for a binary tree node.
* public class TreeNode {
* int val;
* 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) {
//遇到二叉树的问题,用哪个遍历呢?前中后还是层序遍历
//用递归的思想,所以我选择用前序遍历
//递归第一步:确定传入的参数和返回值————传入root,返回翻转之后的root
//递归第二步:确定终止条件
if(root == null){
return root;
}
//递归第三步:单层运行的逻辑
swap(root); //中
invertTree(root.left); //左
invertTree(root.right); //右
return root;
}
private void swap(TreeNode node){
TreeNode tempNode = node.left;
node.left = node.right;
node.right = tempNode;
}
}
力扣题目 101.对称二叉树
/**
* Definition for a binary tree node.
* public class TreeNode {
* int val;
* 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 boolean isSymmetric(TreeNode root) {
TreeNode leftNode = root.left;
TreeNode rightNode = root.right;
return compare(leftNode,rightNode);
}
//递归第一步:确定传入的参数和返回的值
private boolean compare(TreeNode leftNode,TreeNode rightNode){
//递归第二步:确定终止条件
if(leftNode == null && rightNode != null){
return false;
}
if(leftNode != null && rightNode == null){
return false;
}
if( leftNode == null && rightNode == null){
return true;
}
if(leftNode.val != rightNode.val){
return false;
}
//经过以上的判断,证明都有值且等,因此可以进行内测和外侧的比较
boolean insideCompare = compare(leftNode.right,rightNode.left);
boolean outsideCompare = compare(leftNode.left,rightNode.right);
return insideCompare && outsideCompare;
}
}