• 100. Same Tree(LeetCode)


    Given two binary trees, write a function to check if they are equal or not.

    Two binary trees are considered equal if they are structurally identical and the nodes have the same value.

    在下写的代码比较长,但是思路是很简单的,因为先序遍历和中序遍历可以确定一棵树,只需比较两颗树的先序和中序即可,但是还要注意一点,为空节点赋一个值,要不然在树不等的情况下,中序和先序也会相等。比如[1 1]和[1 NULL 1]。

    
    
    /**
     * Definition for a binary tree node.
     * struct TreeNode {
     *     int val;
     *     TreeNode *left;
     *     TreeNode *right;
     *     TreeNode(int x) : val(x), left(NULL), right(NULL) {}
     * };
     */
    class Solution {
    public:
       vector<int> pre;
    	vector<int> mid;
    	bool isSameTree(TreeNode* p, TreeNode* q) {
    		vector<int> ppvet;
    		vector<int> qpvet;
    		vector<int> pmvet;
    		vector<int> qmvet;
    		prem(p);
    		ppvet = pre;
    		pre.clear();
    		prem(q);
    		qpvet = pre;
    		midd(p);
    		pmvet = mid;
    		mid.clear();
    		midd(q);
    		qmvet = mid;
    		/*for (int i = 0; i < pmvet.size(); i++)
    			cout << pmvet[i] << endl;
    		for (int i = 0; i < qmvet.size(); i++)
    			cout << qmvet[i] << endl; */
    		if (ppvet == qpvet&&pmvet == qmvet)
    			return true;
    		else
    			return false;
    
    
    	}
    	void prem(TreeNode * root)
    	{
    		if (root == NULL)
    			return ;
    		pre.push_back(root->val);
    		if (root->left)
    		{
    			pre.push_back(root->left->val);
    			prem(root->left);
    		}
    		else
    			{
    			pre.push_back(-1);
    			prem(root->left);
    		}
    		if (root->right)
    		{
    			pre.push_back(root->right->val);
    			prem(root->right);
    		}
    		else
    			{
    			pre.push_back(-1);
    			prem(root->right);
    		}
    	}
    	void midd(TreeNode * root)
    	{
    		if (root == NULL)
    			return;
    		if (root->left)
    		{
    			mid.push_back(root->left->val);
    			midd(root->left);
    		}
    		else
    			{
    			mid.push_back(-1);
    			midd(root->left);
    		}
    		mid.push_back(root->val);
    		if (root->right)
    		{
    			mid.push_back(root->right->val);
    			midd(root->right);
    		}
    		else
    		{
    			mid.push_back(-1);
    			midd(root->right);
    		}
    	}
    };
    
    
    

      

     
  • 相关阅读:
    【并发编程】并发编程随笔索引
    主题记录
    Java技术栈思维导图
    【ES 6.5.4 】ElasticSearch知识点
    Logstash Oracle同步设置
    【ES】【Reference 7.8 译】官方文档Mapping说明
    【ES】【Java High Level REST Client】官方索引和文档操作指导
    【ES】JAVA集成ES与基本操作及官方查询指导
    【实践】Effective Java实践总结
    【MyBatis】Spring集成MyBatis示例
  • 原文地址:https://www.cnblogs.com/wujufengyun/p/6811210.html
Copyright © 2020-2023  润新知