对相似叶子的二叉树的判断

题目

理解

题目的意思是判断两颗二叉树的叶子值序列是否相同,若相同则为叶相似返回Ture,否则返回False。

解题过程

基本的思路就是从根部遍历,找到叶子结点,并将叶子值存起来,再比较两个叶值序列是否相同。
但遇到几个问题:

  • 开始想要自己创建两颗树,再取叶值进行比较,但是创建顺序的和测试顺序不一样,还出了好多错呀,就果断放弃
  • 还有提交时,没有把结构体注释掉(不懂为啥要注释掉),一直编译不过,但是到不到问题,浪费了很多时间
  • 最开始算法在寻找叶子结点时没有用容器(好像有超时的),(其实后来发现是没有用引用,第二个代码,还快一点) ,编译通过了但是提交后部分有错。没有使用引用导致函数内对vector的修改没有应用到原来的vector上。
  • 最后看了下别人的,都改为引用就过了

代码

class Solution 
  {
	  public:
	  bool leafSimilar(TreeNode * root1, TreeNode * root2) {
		  vector<int>list1;
		  vector<int>list2;
		  leaf(list1, root1);
		  leaf(list2, root2);

		  if (list1.size() == list2.size())
		  {
			  for (int i = 0; i < list1.size(); i++)
				  if (list1[i] != list2[i]) return false;
		  }
		  else
			  return false;
		  return true;
	  }
	  //寻找叶子结点并存值
	  void leaf(vector<int>& leafval,TreeNode* root)
	  {
		  if (root != NULL)
		  {
			  if (root->right == NULL && root->left == NULL)
				  leafval.push_back(root->val);
			  leaf(leafval, root->right);
			  leaf(leafval, root->left);
		  }
	  }
  };

提交记录

在这里插入图片描述
在这里插入图片描述
第二个代码

class Solution {
public:
	bool leafSimilar(TreeNode *root1, TreeNode *root2)
	{
		vector<int>list1;
		vector<int>list2;
		search(root1, list1);
		search(root2, list2);
		if (list1.size() != list2.size()) 
			return false;
		else {
			for (int i = 0; i < list1.size(); i++) {
				if (list1[i] != list2[i]) 
					return false;
			}
		}
		return true;
	}

	void search(TreeNode *now, vector<int> &list)
	{
		if (now==NULL) 
			return;
		if (now->left == NULL && now->right == NULL)
			list.push_back(now->val);
		else {
			if (now->left != NULL) {
				search(now->left, list);
			}
			if (now->right != NULL) {
				search(now->right, list);
			}
		}
	}
};

在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值