Algorithm 如何检查二叉树的结构(不是值)是否具有镜像对称性
我被要求编写一个递归算法来检查二叉树的结构(不是值)是否具有镜像对称性。例如:Algorithm 如何检查二叉树的结构(不是值)是否具有镜像对称性,algorithm,data-structures,binary-tree,mirror,symmetric,Algorithm,Data Structures,Binary Tree,Mirror,Symmetric,我被要求编写一个递归算法来检查二叉树的结构(不是值)是否具有镜像对称性。例如: 1 / \ / \ / \ 3 5 / \ / \ 7 9 11 13 / \ 15 17 具有对称结构。我希望有一位专家能帮助我。提前谢谢。 我知道如何检查值是否对称,但不是实际结构。假设您有一个带有left和right属性的类节点,所需函数在Python中可能如下所示:
1
/ \
/ \
/ \
3 5
/ \ / \
7 9 11 13
/ \
15 17
具有对称结构。我希望有一位专家能帮助我。提前谢谢。
我知道如何检查值是否对称,但不是实际结构。假设您有一个带有
left
和right
属性的类节点
,所需函数在Python中可能如下所示:
def是镜像(左、右):
如果左为无或右为无:#其中一个为无
返回left==right#当两者均为无时为True
返回is_镜像(左、左、右、右)和is_镜像(左、右、右、左)
你可以这样称呼它:
#根据问题创建示例树:
树=节点(1,
节点(3,
节点(7),
节点(9,
节点(15)
)
),
节点(5,
节点(11,
没有一个
节点(17)
),
节点(13)
)
)
打印(是否为镜像(tree.left,tree.right))#正确
这不仅仅是跟踪左和右的问题吗?一种方法是递归函数,其签名为bool isMirrored(struct node*left,struct node*right)
,称为bool result=isMirrored(root->left,root->right)代码>总体思路是一个双DFS,它同时遍历左、右子树。您尝试过什么?添加当前方法/代码如果您知道如何检查值是否对称,只需假设每个节点上的值都为零并进行检查