主题:请实现判断一棵二叉树是否对称的函数。 如果二叉树与镜像相同,则是对称的。
例如,二叉树[ 1,2,2,3,4,4,3 ]是对称的。
1
//
2 2
//
3 4 4 3
然而,下一个[ 1,2,2,空,3,空,3]不是镜像对称的:
1
//
2 2
3 3
示例1 :
输入:根=[ 1、2、2、3、4、4、3]
输出:真
示例2 :
输入:根=[ 1,2,2,空值,3,空值,3]
输出:假
限制:
0=节点数=1000
解决问题的想法:将二叉树的各层放入数组中独自判断,从左到右,如果是空的话放置空指针。
//*
* * *为a二进制树节点定义。
* *类型树结构{
* Val int
* *左*双节点
* *右*双节点
* }
*/
功能对称(根*树状)布尔{
if根==尼尔
返回真
}
tmp :=make ([ ] *三重节点,1 ) ) )
tmp[0]=根//根节点
forlen(tmp ) 0
L:=Len(tmp )。
for i:=0; il; I
if TMP==尼尔TMP!=聂耳
返回假
}
if TMP==尼尔TMP!=聂耳
返回假
}
if TMP==尼尔
继续
}
IF TMP.Val!=如果不等于=tmp[l-i-1].Val{//,则为非对称
返回假
}
左翼号航空母舰!=nil {//放置左边的孩子的树
tmp=append(tmp,tmp [ I ] .左] ) )。
}else{
tmp=应用(tmp,尼尔) ) )。
}
IF TMP .右!=nil{//放置右侧的子树
tmp=应用(tmp,tmp[i].Right ) )。
}else{
tmp=应用(tmp,尼尔) ) )。
}
}
tmp=tmp[l:]//代入tmp是下一层的节点数据
}
返回真
{1}运行时间为:4 ms毫秒,在所有Go提交中击败了74.74%的用户
内存消耗量为:3 MB,在所有Go提交中击败了100.00%的用户
优化:使用递归来确定左右子树是否相等。
//*
* * *为a二进制树节点定义。
* *类型树结构{
* Val int
* *左*双节点
* *右*双节点
* }
*/
功能对称(根*树状)布尔{
if根==尼尔
返回真
}
返回检查(根.左,根.右) )。
}
func check (左,右*三重节点)布尔{2}
if左==尼尔右==尼尔
返回真
}
if左==尼尔| |右==尼尔| |左.右!=right.Val{
返回假
}
) )判断左子树和右子树是否相等,判断左子树左子树和右子树右子树是否相等。 达到对称性。
返回检查(左,右,左检查)左,右) )。
{1}运行时间为:4 ms毫秒,在所有Go提交中击败了74.74%的用户
内存消耗量为:2.9 MB,在所有Go提交中击败了100.00%的用户