對稱二叉樹(java實現)

  • 問題描述

請實現一個函數,用來判斷一顆二叉樹是不是對稱的。注意,如果一個二叉樹同此二叉樹的鏡像是同樣的,定義其爲對稱的。

  • 解決方案

採用層次遍歷,注意空節點也要加入隊列,代碼如下:

/*
public class TreeNode {
    int val = 0;
    TreeNode left = null;
    TreeNode right = null;

    public TreeNode(int val) {
        this.val = val;

    }

}
*/
import java.util.LinkedList;
import java.util.ArrayList;
public class Solution {
    boolean isSymmetrical(TreeNode pRoot)
    {
        if(pRoot == null)
            return true;
        LinkedList<TreeNode> list = new LinkedList<>();
        list.addLast(pRoot);
        while(list.size() > 0){
            ArrayList<Integer> listVal = new ArrayList<>(); 
            int len = list.size();
            for(int i = 0; i < len;i ++){
                TreeNode node = list.pollFirst();
                if(node != null){
                    list.addLast(node.left);//無論左右子樹是否爲空,都要加入
                    list.addLast(node.right);
                    listVal.add(node.val);       
                }
                else
                    listVal.add(null); //空節點也要加入null,起佔位作用
            }
            //雙指針判斷是否對稱
            int l = 0;
            int h = listVal.size() - 1;
                while(l < h){
                    if(listVal.get(l) != listVal.get(h))
                        return false;
                    else{
                        l ++;
                        h --;
                    }
                }
        }
        return true;
    }
}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章