博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
树的子结构
阅读量:4187 次
发布时间:2019-05-26

本文共 986 字,大约阅读时间需要 3 分钟。

思路: 

1. 在树A中查找和根结点的值一样的结点.如果发现某一结点的值和树B的头结点的值相同,则进行第二步判断.

第二步:

2. 判断树A中以R为根结点的子树是不是和树B具有相同的结构.即如果结点R的值和树B的根节点不相同,则以R

为根节点的子树和树B肯定不是具有相同的结点;如果它们的值相同,则递归的判断它们各自的左右结点的值是不

是相同。

public boolean HasSubtree(TreeNode root1, TreeNode root2)	{		boolean flag = false; // 设置标志位flag,默认为false		if (root1 != null && root2 != null)		{			if (root1.val == root2.val) // 如果根结点的值相同,就继续判断			{				flag = DoesTree1HaveTree2(root1, root2);			}			// 比较树A左子树结点和树B根结点的值			if (!flag)				flag = HasSubtree(root1.left, root2);						// 比较树A右子树结点和树B根结点的值			if (!flag)				flag = HasSubtree(root1.right, root2);		}		return flag;	}	private boolean DoesTree1HaveTree2(TreeNode root1, TreeNode root2)	{		// 树Ak到达叶节点,而树B没有到达时		if (root1 == null && root2 != null)			return false;		// 树B到达叶节点时		if (root2 == null)			return true;		// 树A中结点的值和树B中结点值不相等时		if (root1.val != root2.val)			return false;		// 继续比较树A和树B的左子树和右子树的情况		return DoesTree1HaveTree2(root1.left, root2.left) 				&& DoesTree1HaveTree2(root1.right, root2.right); 	}

你可能感兴趣的文章
《Word排版艺术》读后感——兼谈与LaTeX的比较
查看>>
while (n-- > 0) 与 while (--n >= 0)
查看>>
LaTeX 与字体
查看>>
LaTeX 常用功能
查看>>
变长参数的 Tracer
查看>>
Linux 下配置 802.1X
查看>>
书籍的基本结构, in XML & LaTeX
查看>>
Microsoft Visual C++ Toolkit 2003 发布
查看>>
算法复杂度攻击
查看>>
书评:《C# Primer》 by Joe Casad
查看>>
zlib 与 libpng 的配置与使用 part 3 libpng的安装与生成PNG图片
查看>>
在VCL应用中运用MVC模式
查看>>
不值一驳
查看>>
好的服务器系统
查看>>
一个批量更改文件名的Python脚本
查看>>
[技术八卦]放毒记
查看>>
市场的选择
查看>>
试玩matplotlib碰到的问题
查看>>
Turbo还是那个Turbo吗?
查看>>
TDD的误解
查看>>