leetcode日记—二叉树的对称和反转

发布于 2020-10-05  196 次阅读


碎碎念:昨儿去毕棚沟爬山回来,太lay了,随便写点关于二叉树的easy题就好了。

题目如下:

分别就是判断一个二叉树是不是对称的,还有把一个二叉树对称的节点反转过来。

反转就是这个效果。

对称判断的本质就是每个相互比较的节点中,左节点的右孩子应该与右节点的左孩子相同,左节点的左孩子应该与右节点的右孩子相同。

对称代码如下:

/**
 * Definition for a binary tree node.
 * public class TreeNode {
 *     int val;
 *     TreeNode left;
 *     TreeNode right;
 *     TreeNode(int x) { val = x; }
 * }
 */
class Solution {
    public boolean isSymmetric(TreeNode root) {
        if(root==null)
            return true;
        return helper(root.left,root.right);
    }
    public boolean helper (TreeNode leftChild,TreeNode rightChild){
        if(leftChild==null&&rightChild==null)
            return true;
        if(leftChild!=null&&rightChild!=null){
            if(leftChild.val!=rightChild.val){
            return false;
            }
            else{
                if(!helper(leftChild.left,rightChild.right))
                    return false;
                if(!helper(leftChild.right,rightChild.left))
                    return false;
                return true;
            }
        }    
        else 
        return false;
    }
}

倒置就更简单了,递归一直换直到null就是了。

代码如下:

/**
 * 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) {
        return helper(root);
    }
    public TreeNode helper(TreeNode root){
        if(root== null )
            return root;
        TreeNode temp = root.left;
        root.left = root.right;
        root.right = temp;
        helper(root.left);
        helper(root.right);
        return root;
    }
}

你好哇!欢迎来到雷公马碎碎念的地方:)