思路
- 根節點相等,左子樹的左子樹和右子樹的右子樹對稱,左子樹的右子樹和右子樹的左子樹對稱
直接上代碼:
package com.zyblue.fastim.common.algorithm;
/**
* 判斷是否是對稱二叉樹
* Author : BlueSky 2019.11.14
* 例如
* 1
* / \
* 2 2
* / \ / \
* 3 4 4 3
* 思路:
* 1、遞歸實現
* 2、根節點相等,左子樹的左子樹和右子樹的右子樹對稱,左子樹的右子樹和右子樹的左子樹對稱
*/
public class SymmetryTree {
public Boolean isSymmetryTree(TreeNode node){
if(node == null){
return true;
}else {
return isSymmetryTree(node.getLeft(), node.getRight());
}
}
public Boolean isSymmetryTree(TreeNode nodeLeft, TreeNode nodeRight) {
if(nodeLeft == null && nodeRight == null){
return true;
}else if(nodeLeft == null || nodeRight == null){
return false;
}else {
if(nodeLeft.getVal() != nodeRight.getVal()){
return false;
}
// 這裏遞歸每一個子樹,遞歸一個是錯誤的
return isSymmetryTree(nodeLeft.getLeft(), nodeRight.getRight())
&& isSymmetryTree(nodeLeft.getRight(), nodeRight.getLeft());
}
}
public static class TreeNode {
private int val;
private TreeNode left;
private TreeNode right;
public int getVal() {
return val;
}
public void setVal(int val) {
this.val = val;
}
public TreeNode getLeft() {
return left;
}
public void setLeft(TreeNode left) {
this.left = left;
}
public TreeNode getRight() {
return right;
}
public void setRight(TreeNode right) {
this.right = right;
}
}
}