标签: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. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。