iis服务器助手广告广告
返回顶部
首页 > 资讯 > 后端开发 > 其他教程 >C++实现判断相同树的功能
  • 623
分享到

C++实现判断相同树的功能

2023-06-20 17:06:25 623人浏览 八月长安
摘要

本篇内容主要讲解“c++实现判断相同树的功能”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“C++实现判断相同树的功能”吧!判断相同树Given two binary trees, write a

本篇内容主要讲解“c++实现判断相同树的功能”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“C++实现判断相同树的功能”吧!

判断相同树

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

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

Example 1:

Input:     1         1
    / \       / \
2   3     2   3

        [1,2,3],   [1,2,3]

Output: true

Example 2:

Input:     1         1
/           \
2             2

[1,2],     [1,null,2]

Output: false

Example 3:

Input:     1         1
/ \       / \
2   1     1   2

[1,2,1],   [1,1,2]

Output: false

判断两棵树是否相同和之前的判断两棵树是否对称都是一样的原理,利用深度优先搜索 DFS 来递归。代码如下:

解法一:

class Solution {public:    bool isSameTree(TreeNode *p, TreeNode *q) {        if (!p && !q) return true;        if ((p && !q) || (!p && q) || (p->val != q->val)) return false;        return isSameTree(p->left, q->left) && isSameTree(p->right, q->right);    }};

这道题还有非递归的解法,因为二叉树的四种遍历(层序,先序,中序,后序)均有各自的迭代和递归的写法,这里我们先来看先序的迭代写法,相当于同时遍历两个数,然后每个节点都进行比较,可参见之间那道 Binary Tree Preorder Traversal,参见代码如下:

解法二:

class Solution {public:    bool isSameTree(TreeNode* p, TreeNode* q) {        stack<TreeNode*> st;        st.push(p); st.push(q);        while (!st.empty()) {            p = st.top(); st.pop();            q = st.top(); st.pop();            if (!p && !q) continue;            if ((p && !q) || (!p && q) || (p->val != q->val)) return false;            st.push(p->right); st.push(q->right);            st.push(p->left); st.push(q->left);        }        return true;    }};

也可以使用中序遍历的迭代写法,对应之前那道 Binary Tree Inorder Traversal,参见代码如下:

解法三:

class Solution {public:    bool isSameTree(TreeNode* p, TreeNode* q) {        stack<TreeNode*> st;        while (p || q || !st.empty()) {            while (p || q) {                if ((p && !q) || (!p && q) || (p->val != q->val)) return false;                st.push(p); st.push(q);                p = p->left; q = q->left;            }            p = st.top(); st.pop();            q = st.top(); st.pop();            p = p->right; q = q->right;        }        return true;    }};

对于后序遍历的迭代写法,貌似无法只是用一个栈来做,因为每次取出栈顶元素后不立马移除,这样使用一个栈的话两棵树结点的位置关系就会错乱,分别使用各自的栈就好了,对应之前那道 Binary Tree Postorder Traversal,参见代码如下:

解法四:

class Solution {public:    bool isSameTree(TreeNode* p, TreeNode* q) {        stack<TreeNode*> st1, st2;        TreeNode *head1, *head2;        while (p || q || !st1.empty() || !st2.empty()) {            while (p || q) {                if ((p && !q) || (!p && q) || (p->val != q->val)) return false;                st1.push(p); st2.push(q);                p = p->left; q = q->left;            }            p = st1.top();             q = st2.top();             if ((!p->right || p->right == head1) && (!q->right || q->right == head2)) {                st1.pop(); st2.pop();                head1 = p; head2 = q;                p = nullptr; q = nullptr;            } else {                p = p->right;                q = q->right;            }        }        return true;    }};

对于层序遍历的迭代写法,其实跟先序遍历的迭代写法非常的类似,只不过把栈换成了队列,对应之前那道 Binary Tree Level Order Traversal,参见代码如下:

解法五:

class Solution {public:    bool isSameTree(TreeNode* p, TreeNode* q) {        queue<TreeNode*> que;        que.push(p); que.push(q);        while (!que.empty()) {            p = que.front(); que.pop();            q = que.front(); que.pop();            if (!p && !q) continue;            if ((p && !q) || (!p && q) || (p->val != q->val)) return false;            que.push(p->right); que.push(q->right);            que.push(p->left); que.push(q->left);        }        return true;    }};

GitHub 同步地址:

https://github.com/grandyang/LeetCode/issues/100 

类似题目:

Binary Tree Preorder Traversal

Binary Tree Inorder Traversal

Binary Tree Postorder Traversal

Binary Tree Level Order Traversal

参考资料:

Https://leetcode.com/problems/same-tree/

https://leetcode.com/problems/same-tree/discuss/32684/My-non-recursive-method

https://leetcode.com/problems/same-tree/discuss/32687/Five-line-Java-solution-with-recursion

到此,相信大家对“C++实现判断相同树的功能”有了更深的了解,不妨来实际操作一番吧!这里是编程网网站,更多相关内容可以进入相关频道进行查询,关注我们,继续学习!

--结束END--

本文标题: C++实现判断相同树的功能

本文链接: https://www.lsjlt.com/news/298557.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • C++实现判断相同树的功能
    本篇内容主要讲解“C++实现判断相同树的功能”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“C++实现判断相同树的功能”吧!判断相同树Given two binary trees, write a...
    99+
    2023-06-20
  • C++实现LeetCode(100.判断相同树)
    [LeetCode] 100. Same Tree 判断相同树 Given two binary trees, write a function to check if they a...
    99+
    2024-04-02
  • C语言详解判断相同树案例分析
    目录一、题目描述二、解题思路题目难度:简单 一、题目描述 给你两棵二叉树的根节点 p 和 q ,编写一个函数来检验这两棵树是否相同。 如果两个树在结构上相同,并且节点具有相同的值,则...
    99+
    2024-04-02
  • C++实现LeetCode(101.判断对称树)
    [LeetCode] 101.Symmetric Tree 判断对称树 Given a binary tree, check whether it is a mirror of it...
    99+
    2024-04-02
  • C#判断语句的表达式树实现
    C# 提供了以下类型的判断语句: 语句描述if一个 if 语句 由一个布尔表达式后跟一个或多个语句组成。if...else一个 if 语句 后...
    99+
    2024-04-02
  • Python3判断节假日功能怎么实现
    实现Python3判断节假日的功能,可以使用第三方库进行实现,例如`holidays`库。首先,需要安装`holidays`库:``...
    99+
    2023-08-17
    Python3
  • laravel ajax curd 搜索登录判断功能的实现
    今天来说说关于laravel的各种操作 混杂了一点ajax先来个添加表单 有些英文的$没法打出来用中文代替 登录数据我和列表展示混在一起了,千万不要和我犯一样的错误。 <f...
    99+
    2024-04-02
  • C#中怎么判断浏览器功能
    今天就跟大家聊聊有关C#中怎么判断浏览器功能,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。C#判断浏览器功能的分析和解决:我们首先用 JavaScript 建立一个Cookie,然后...
    99+
    2023-06-17
  • 用Python如何判断不同类型的二叉树
    二叉树是一种树状数据结构,其中每个父节点最多可以有两个子节点。 二叉树的类型 完全二叉树 完全二叉树是一种特殊类型的二叉树,其父节点存在2种情况,要么有2个子节点,要么没有子节点,详情如下图: 完全二叉树定理 1、叶数为i+1 2...
    99+
    2024-01-23
  • 实现mysql树查询的功能
    这篇文章给大家分享的是有关实现mysql树查询的功能的内容。小编觉得挺实用的,因此分享给大家做个参考。一起跟随小编过来看看吧。需求:查找当前(任意)级别下的所有子节点。通过自定义mysql函数实现,先贴代码...
    99+
    2024-04-02
  • js中isSame判断对象是否相同的方法
    这篇文章给大家分享的是有关js中isSame判断对象是否相同的方法的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。1、isSame判断一个moment对象是否和另一个moment对象相同。moment('2...
    99+
    2023-06-15
  • C#中怎么实现断点续传功能
    本篇文章为大家展示了C#中怎么实现断点续传功能,内容简明扼要并且容易理解,绝对能使你眼前一亮,通过这篇文章的详细介绍希望你能有所收获。以下是一个请求报文与相应的回复报文的例子:GET /image/index_r4_c1.jpg&...
    99+
    2023-06-17
  • mysql实现if语句判断功能的六种使用形式
    文章目录 前言一、ifnull函数二、nullif函数三、if函数四、if语句(多用于存储过程)五、if-else语句(多用于存储过程)六、if-elseif-else语句(多用于存储过程)总...
    99+
    2023-09-15
    mysql 数据库 java
  • C++实现水仙花数判断实例
    目录前言一、思路分析二、代码实现1.水仙花函数2.完整代码总结前言 水仙花数(Narcissistic number)也被称为超完全数字不变数(pluperfect digital ...
    99+
    2024-04-02
  • C语言中如何实现判断
    本篇内容主要讲解“C语言中如何实现判断”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“C语言中如何实现判断”吧!(一)先动手编写一个程序:#include <stdio.h>...
    99+
    2023-06-17
  • JavaScript相等判断的避坑实战指南
    目录JS中的相等性1、严格相等(===)2、非严格相等(抽象相等)(==)3、同值相等4、零值相等Object.is()实现方案总结JS中的相等性 1、严格相等(===) 严格相等本...
    99+
    2024-04-02
  • 用c语言编程实现素数判断(判断素数的c语言程序函数)
    以下是一个用C语言编写的判断素数的函数:```c#include #include bool isPrime(int n) {if ...
    99+
    2023-09-22
    c语言
  • Android实现简单的照相功能
    一个简单的照相功能,拍照之后在另一个activit中显示出拍照的图片。首先是布局文件: <xml version="1.0" encoding="utf-8"> <...
    99+
    2024-04-02
  • mysql实现if语句判断功能的6种使用形式小结
    目录前言一、ifnull函数二、nullif函数三、if函数四、if语句(多用于存储过程)五、if-else语句(多用于存储过程)六、if-elseif-else语句(多用于存储过程)总结前言 在mysql数据库中实现判...
    99+
    2023-08-07
    mysql的if语句判断 mysql中if判断语句 mysql if语句的使用
  • javascript中es6如何判断数组是否含有相同的值
    这篇文章主要介绍了javascript中es6如何判断数组是否含有相同的值,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。 ...
    99+
    2024-04-02
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作