问答题 4.  两棵二叉树相等是指这两棵二叉树有着相同的结构,并且在相同位置上的结点有相同的值。如何判断两棵二叉树是否相等?
【正确答案】如果两棵二叉树root1、root2相等,那么root1与root2结点的值相同,同时它们的左右孩子也有着相同的结构,并且对应位置上结点的值相等,即root1.data=root2.data,并且root1的左子树与root2的左子树相等,root1的右子树与root2的右子树相等。根据这个条件,可以非常容易地写出判断两棵二叉树是否相等的递归算法。实现代码如下:
   class BiTNode:
   def __init__(self):
   self.data=None
   self.lchild=None
   self.rcbild=None
   
   """
   方法功能: 判断两棵二叉树是否相等
   参数: root1与root2分别为两棵二叉树的根结点
   返回值: true:如果两棵树相等则返回true, 否则返回false
   """
   def isEqual(root1,root2):
   if root1==None and root2==None:
   return True
   if root1==None and root2!=None:
   return False
   if root1!=None and root2==None:
   return False
   if root1.data==root2.data:
   return isEqual(root1.lchild,root2.lchild) and isEqual(root1.rchild,root2.rchild)
   else:
   return False
   
   def constructTree():
   root=BiTNode()
   node1=BiTNode()
   node2=BiTNode()
   node3=BiTNode()
   node4=BiTNode()
   root.data=6
   node1.data=3
   node2.data=-7
   node3.data=-1
   node4.data=9
   root.lchild=node1
   root.rchild=node2
   nodel.lchild=node3
   nodel.rchild=node4
   node2.lchild=node2.rchild=node3.lchild=node3.rchild=\
   node4.lchild=node4.rchild=None
   return root
   
   if __name__=="__main__":
   root1=constructTree()
   root2=constructTree()
   equal=isEqual(root1,root2)
   if equal:
   print "这两棵树相等"
   else:
   print "这两棵树不相等"
   程序的运行结果为:
   这两棵树相等
   算法性能分析:
   这种方法对两棵树只进行了一次遍历,因此,时间复杂度为O(N)。此外,这种方法没有申请额外的存储空间。
【答案解析】[考点] 如何判断两棵二叉树是否相等