020给定两个二叉树T1,T2判断T1是否是T2的子树(keep it up)

给定两个二叉树T1,T2判断T1是否是T2的子树

首先在T2中查找T1的根节点,如果找不到,

则T1不是T2的子树,如果能找到,我们可以

遍历T1,检查T1的每个结点是否对应的存在T2

中。

代码:

struct TreeNode
{
	int data;
	TreeNode* leftChild;
	TreeNode* rightChild;
};

bool isExited(const TreeNode* vRoot1, const TreeNode *vRoot2, TreeNode* vRes)
{
	if (vRoot1 == NULL) return false;

	if (vRoot2 == vRoot1)
	{
		vRes = vRoot1;
		return true;
	}

	bool Flag = false;
	Flag = isExited(vRoot1, vRoot2->leftChild, vRes);
	if (!Flag)
	{
		Flag = isExited(vRoot1, vRoot2->rightChild, vRes);
	}
	return Flag;
}

bool isSame(const TreeNode* vRoot1, const TreeNode *vRoot2)
{
	if (vRoot1 == NULL && vRoot2 == NULL) return true;
	if (vRoot1 != vRoot2) return false;
	bool Flag = isSame(vRoot1->leftChild, vRoot2->leftChild);
	if (!Flag) return false;
	Flag = isSame(vRoot1->rightChild, vRoot2->rightChild);
	return Flag;
}

bool isSubTree(const TreeNode* vRoot1, const TreeNode *vRoot2)
{
	TreeNode* Temp = NULL; //保存在T2中的位置
	if (!isExited(vRoot1, vRoot2, Temp)) return false;
	return isSame(vRoot1, Temp);
}
时间: 2024-10-12 23:36:43

020给定两个二叉树T1,T2判断T1是否是T2的子树(keep it up)的相关文章

比较两棵二叉树--(比较两棵二叉树是否相同/判断一棵二叉树是否是另一棵二叉树的子树)

一,问题介绍 本文章讨论两个问题: ①如何判断两棵二叉树的结构是一样的.对应的每个结点都有着相同的值.--即判断两棵二叉树是一样的 ②给定两棵二叉树,如何判断一棵二叉树是另一棵二叉树的子结构 ③给定两棵二叉树,如何判断一棵二叉树是另一棵二叉树的子树 注意,子结点与子树有那么一点点不同. 上面的二叉树B 是二叉树A 的子结构,但是不能说是二叉树A的子树.但是二叉树C 是 二叉树A的子树. 二,问题分析 1,如何判断两棵二叉树的结构是一样的.且对应的每个结点都有着相同的值. 对于①如何判断两棵二叉树

js:给定两个数组,如何判断他们的相对应下标的元素类型是一样的

题目: 给Array对象原型上添加一个sameStructureAs方法,该方法接收一个任意类型的参数,要求返回当前数组与传入参数数组(假定是)相对应下标的元素类型是否一致. 假设已经写好了Array.prototype.sameStructureAs ,会有下面的结果: [1,1].sameStructureAs([2,2]) // true [1,[1,1]].sameStructureAs([2,[2,2]]) // true [1,[1]].sameStructureAs([[2],2]

Same Tree 比较两个二叉树是否完全相同

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. 给定两个二叉树,判断是否完全相同. 若两个二叉树完全相同,则每个节点的左子树和右子树必然都相同. 可以采用递归方式,从根节点开始:

15-- 输入两个二叉树A和B,判断B树是否包含于A树。

// // main.cpp // subStructureInTree // // Created by Hugo Cao on 15/7/10. // Copyright (c) 2015年 Hugo Cao . All rights reserved. // /* 问题描述: 输入两个二叉树A和B,判断B树是否包含于A树. 查找B子树是否在A中, 思路:(1)首先寻找B根结点,是否在A中, (2)如果在,就查看是否A树包含B树 思考如何遍历A树寻找更结点,因为只有前序遍历可以最先找到根节点

28、输入两棵二叉树A,B,判断B是不是A的子结构。(ps:我们约定空树不是任意一个树的子结构)

题目描述 输入两棵二叉树A,B,判断B是不是A的子结构.(ps:我们约定空树不是任意一个树的子结构) 思路:  1.当Tree1和Tree2都不为零的时候,才进行比较.否则直接返回false  2. 2.1如果找到了对应Tree2的根节点的点, 以这个根节点为为起点判断是否包含Tree2 2.2 如果找不到,那么就再去root的左孩子当作起点,去判断时候包含Tree22.3 如果还找不到,那么就再去root的右孩子当作起点,去判断时候包含Tree2 1 public class Solution

求二叉树的给定两个结点之间的距离

给定一颗二叉树,和两个给定的结点,求出这两个结点之间的距离 拿到题目时不要认为是求出二叉树的结点之间的最大距离,题目是求两个结点的之间的距离 题目有几种情况 两个结点分布在根节点的左子树或者右子树 一个结点分布在根节点的左子树,一个结点分布在根节点的右子树 这两个结点是兄弟结点 一个结点是另外结点的祖先结点 本题的解题思路是 利用层次遍历的方法,获取每个结点的高度,根节点左子树的高度用正数表示,根节点右子树的高度用负数表示 这样当两个结点分布在:一个结点分布在根节点的左子树,一个结点分布在根节点

C++算法之 求二叉树中叶子节点的个数 与 判断两棵二叉树是否结构相同

//叶子节点的个数 /* (1)如果二叉树为空,返回0 (2)如果二叉树不为空且左右子树为空,返回1 (3)如果二叉树不为空,且左右子树不同时为空,返回左子树中叶子节点个数加上右子树中叶子节点个数 */ int GetLeafNodeNum(BTree* root) { if(root == NULL) return 0; if(root->m_pLeft == NULL && root->m_pRight == NULL) return 1; int LeafNumOfLef

leetcode.617 合并两个二叉树

题目描述:给予两个二叉树  t1 , t2  ,合并他们. Given two binary trees and imagine that when you put one of them to cover the other, some nodes of the two trees are overlapped while the others are not. You need to merge them into a new binary tree. The merge rule is t

leetcode算法题2: 合并两个二叉树。递归,如何切入并保持清醒?

/* Given two binary trees and imagine that when you put one of them to cover the other, some nodes of the two trees are overlapped while the others are not. You need to merge them into a new binary tree. The merge rule is that if two nodes overlap, t