首页 > 编程知识 正文

二叉树的题目及答案(leetcode 1)

时间:2023-05-06 17:48:35 阅读:81656 作者:2991

主题:请实现判断一棵二叉树是否对称的函数。 如果二叉树与镜像相同,则是对称的。

例如,二叉树[ 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%的用户

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。