介绍
本篇内容主要讲解“C + +实现判断相同树的功能”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“C + +实现判断相同树的功能”吧!
判断相同树
给定两个二叉树,编写一个函数来检查是否他们是相同的。
两个二叉树被认为是相同的,如果他们在结构上是相同的,节点有相同的价值。
示例1:
输入:,,,,1,,,,,,,,1
,,,,//,,,,,,/\
2,,3,,,,2,,3,,,,,,,(1、2、3),,,(1、2、3)
引用>
输出:真正的示例2:
输入:,,,,1,,,,,,,,1
/,,,,,,,,,,\
2,,,,,,,,,,,,2
[1、2],,,,,(1,null, 2)输出:假
引用>示例3:
输入:,,,,1,,,,,,,,1
//,,,,,,/\
2,,1,,,,1,,2
(1、2、1),,,[1,2]输出:假
引用>判断两棵树是否相同和之前的判断两棵树是否对称都是一样的原理,利用深度优先搜索DFS来递归。代码如下:
解法一:
class Solution { 公众: ,,,bool isSameTree (TreeNode * p, TreeNode * q), { ,,,,,,,if (! p ,,, !问),return 真实; ,,,,,,,if ((p ,,, !问),| |,(! p ,,, q, | |, (p→val !=,问→val)), return 假; ,,,,,,,return isSameTree (p→左,,问→左),,,,isSameTree (p→对吧,,q→右); ,,,} };这道题还有非递归的解法,因为二叉树的四种遍历(层序,先序,中序,后序)均有各自的迭代和递归的写法,这里我们先来看先序的迭代写法,相当于同时遍历两个数,然后每个节点都进行比较,可参见之间那道二叉树前序遍历,参见代码如下:
解法二:
class Solution { 公众: ,,,bool isSameTree (TreeNode *, p, TreeNode *, q), { ,,,,,,,stack也可以使用中序遍历的迭代写法,对应之前那道,二叉树进行遍历,参见代码如下:
解法三:
class Solution { 公众: ,,,bool isSameTree (TreeNode *, p, TreeNode *, q), { ,,,,,,,stackc++实现判断相同树的功能