LeetCode101对称二叉树(中序思想)

本文探讨了如何使用中序遍历和栈实现对称二叉树的判断。作者首先介绍了通过递归中序遍历检测是否回文的方法,然后展示了利用两个栈实现左右节点交替比较的高效解决方案。两种方法对比,突显了不同遍历策略在对称性检测中的应用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

在这里插入图片描述
拿到这题第一想法是判断中序遍历的结果是否回文,但是被最后几个样例卡了
于是加上null判断又挂了,最后发现需要把null换成当前的层数赋值才过

 public void midOrder(TreeNode node, List<Integer> list,int deep){
        if (node == null) {
            list.add(deep);
            return;
        }
        midOrder(node.left,list,deep+1);
        list.add(node.val);
        midOrder(node.right,list,deep+1);
    }
    public boolean isSymmetric(TreeNode root) {
        List<Integer> list = new ArrayList<>();
        midOrder(root,list,1);
        System.out.println(list);
        Object[] arr = list.toArray();
        int len = arr.length;
        for (int i = 0; i < (len-1)/2; i++) {
            if (arr[i]!=arr[len-1-i]) return false;
        }
        return true;
    }
}

方法二 看了hxd的博客的得到的想法
对称二叉树 满足左根右和右根左遍历数值相等
只需要同时按照两个顺序遍历不相等就不对称

  //对称二叉树 满足左根右和右根左遍历数值相等
    public boolean isSymmetric(TreeNode root) {
        Stack<TreeNode> leftStack = new Stack<>();
        Stack<TreeNode> rightStack = new Stack<>();
        TreeNode leftNode = root;
        TreeNode rightNode = root;
        while (!leftStack.empty()||leftNode!=null){
            while (leftNode!=null&&rightNode!=null){
                if (leftNode.val != rightNode.val) return false;
                leftStack.push(leftNode);
                leftNode = leftNode.left;
                rightStack.push(rightNode);
                rightNode = rightNode.right;
            }
            if (leftNode != rightNode) return false;//此时若不都为空 就不对称
            leftNode = leftStack.pop();
            leftNode = leftNode.right;
            rightNode = rightStack.pop();
            rightNode = rightNode.left;
        }
        return true;
    }
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值