ICode9

精准搜索请尝试: 精确搜索
首页 > 编程语言> 文章详细

820算法题解答(2022年8月12日更新)

2022-08-12 23:30:09  阅读:189  来源: 互联网

标签:node 结点 12 return list 先序 2022 null 820


820算法题解答

2021年最后一题:如何判断一个二叉树的结构是否对称(不考虑结点的值,只考虑结构)

[分析]:常规先序遍历的顺序是:中,左,右;镜像先序遍历的顺序是:中,右,左。
只要常规先序序列和镜像先序序列相等,那么这颗二叉树就是对称的。
[注]:遍历的序列需要包括null结点
[代码实现]
public static void judgeMirror(TreeNode node){
	//两个list用来存储常规先序序列和镜像先序序列
        List left = new ArrayList();
        List right = new ArrayList();
	//分别获取常规先序序列和镜像先序序列的函数
        leftOrder(node, left);
        rightOrder(node, right);
	//将获得的序列进行一一对比,若有不同则非对称,若相同则对称
        for (int i = 0; i < left.size(); i++){
            if (left.get(i) != right.get(i)){
                System.out.println("该树非镜像");
                return;
            }
        }
        System.out.println("该树是镜像");
        return;
    }
    public static void leftOrder(TreeNode node, List list){
        if (node == null){
	//因为不考虑结构,所以若结点为null则add 0
            list.add(0);
            return;
        }
	//因为不考虑结构,所以若结点为不为null则add 1
        list.add(1);
        leftOrder(node.left, list);
        leftOrder(node.right, list);
        return;
    }
    public static void rightOrder(TreeNode node, List list){
        if (node == null){
            list.add(0);
            return;
        }
        list.add(1);
        rightOrder(node.right, list);
        rightOrder(node.left, list);
        return;
    }

2020年最后一题:如何获取一个二叉排序树中值小于给定值x的最大的结点target

[分析]:对于当前结点,若是值>=x,则target必定在左孩子取到
若是值<x,则target=当前节点或者在右孩子取到
[注]:注意边界条件
public static TreeNode findMax(TreeNode node, int x){
        if (node == null)
            return null;
	//若是当前结点的值<=x,则在左孩子寻找target
        if (node.val >= x)
            return findMax(node.left,x);
	//否则target=当前结点或者在右孩子中取到
        else{
	//rightMax即为右孩子中的target
            TreeNode rightMax = findMax(node.right,x);
	//当rightMax为空时,target即为当前结点;否则为rightMax
            return rightMax == null ? node : rightMax;
        }
    }

标签:node,结点,12,return,list,先序,2022,null,820
来源: https://www.cnblogs.com/wyh-s/p/16581733.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有