數據結構和算法之判斷對稱二叉樹

思路

  1. 根節點相等,左子樹的左子樹和右子樹的右子樹對稱,左子樹的右子樹和右子樹的左子樹對稱

直接上代碼:

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;
        }
    }

}

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章