题解 | #对称的二叉树#

对称的二叉树

http://www.nowcoder.com/practice/ff05d44dfdb04e1d83bdbdab320efbcb

import java.util.Stack;
/*
public class TreeNode {
    int val = 0;
    TreeNode left = null;
    TreeNode right = null;

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

    }

}
*/
public class Solution {
    
    // 定义一个队列,用于存放节点
    LinkedList<Integer> queue = new LinkedList<>();
    
    // 系统定义的函数
    boolean isSymmetrical(TreeNode pRoot) {
        if (null == pRoot || (null == pRoot.left && null == pRoot.right)) {
            return true;
        }
        if ((null == pRoot.left && null != pRoot.right) || (null != pRoot.left && null == pRoot.right)) {
            return false;
        }
        if (pRoot.left.val != pRoot.right.val) {
            return false;
        }
        // 调用自定义的函数,得到中序遍历的队列
        process(pRoot);
        // 定义一个辅助栈
        Stack<Integer> stack = new Stack<>();
        // 定义一个整型变量,用于存放 queue 的长度
        int ql = queue.size();
        // 将队列的前半部分压入栈中
        for (int i = 0; i < (ql / 2); i++) {
            stack.push(queue.poll());
        }
        // 将根节点从队列的头部移除
        queue.poll();
        while (!stack.isEmpty() && !queue.isEmpty()) {
            if (queue.poll() != stack.pop()) {
                return false;
            }
        }
        return true;
    }
    
    // 中序遍历的递归实现
    public void process(TreeNode root) {
        if (null == root) {
            return;
        }
        process(root.left);
        queue.add(root.val);
        process(root.right);
    }
}
全部评论

相关推荐

算法冲刺中:kpi面加一,面完完全没动静,感谢信都没有
点赞 评论 收藏
分享
11-06 16:50
门头沟学院 Java
用微笑面对困难:word打字比赛二等奖的我,也要来凑合凑合
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务