前言
之前记录过二叉树的遍历方法。 这次记录一下二叉树的镜像树。 就我个人而言,我不喜欢太多的文字。
1.什么是镜像树?
镜树,简单的理解就是中间放一个全身镜,全身镜的内侧和外侧的关系是对称的。让我想起了平面镜成像
镜像树无非就是A、B、C有树关系,头部的镜像就是它自己
我简单解释一下:
C节点:C是根节点,C的镜像节点就是C‘
B节点:C的左节点B = C'的右节点B‘
A节点:B的左节点A = B‘的右节点A’ 且 B的右节点null = B’的左节点
2. 镜像树的应用场景
目前大多在哪里遇到:刷题
我还没有遇到过具体的应用场景,所以在这里留下记录,等以后遇到了再补充。
3.如何确认这是一棵镜像树
刚才提到应用场景是刷题。 这是李口原来的问题。 我不会发布问题的具体描述。 如果有需要,您可以点击下面的链接来进行操作。 基本上,这意味着给你一个树的头节点。 ,你这样填充,让这个技巧
101.对称二叉树
Sword指的是。 对称二叉树
先别急着写代码,先考虑如何判断一个节点是否镜像(对称)。
我怀里有两个孩子,右边的女儿和右边的女儿一样
左头==右头
假设我们有这样一个方法来判断一个节点是否是镜像平面镜成像规律图表,那么我们只要一层层递归就可以得到整棵树是否是镜像的技巧了?
下面是写法:
初始根节点,将自身与自身进行比较以确定边界条件:
2.1 如果两个节点其中一个不为空,另一个为空,则直接返回false。
2.2 如果两个节点都为空,则直接返回true。 当判断两个节点的值是否相同时,如果相同则递归进行。
public boolean isSymmetric(TreeNode root) {
return isSameNode(root,root);
}
public static boolean isSameNode(TreeNode p, TreeNode q) {
if (p == null ^ q == null) {
return false;
}
if (p == null && q == null) {
return true;
}
return p.val == q.val && isSameNode(p.left, q.right) && isSameNode(p.right, q.left);
}
四、回顾二叉树的遍历方法
之前写过二叉树的遍历方法:前序、中序、后序
优先顺序:先左后右
中间顺序:先左,后头,再右
后续顺序:先左,后右平面镜成像规律图表,最后头
后来写完复制代码后,提出了递归顺序:每个节点进入3次。
第一个复制结果中,是预购的
第二次复制的结果是中序的
第三个副本的结果是后序
再次手写递归序列代码:
public void ds(TreeNode head){
//边界条件
if(head==null){
return;
}
//第一次进head节点
System.out.println("我是先序:"+head.val);
ds(head.left);
//第二次进head节点
System.out.println("我是中序:"+head.val);
ds(head.right);
//第三次进head节点
System.out.println("我是后序:"+head.val);
}