剑指Offer18树的子结构

2024-08-23 18:58
文章标签 子结构 offer18

本文主要是介绍剑指Offer18树的子结构,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

题目:

输入两颗二叉树A和B,判断B是不是A的子结构。

分析:

这个题没有难度,就是通过递归来一步步判断。

下面是代码:

bool DoesTree1HaveTree2(BinaryTreeNode *pRoot1,BinaryTreeNode *pRoot2)
{if(pRoot2 == NULL)return true;if(pRoot1 == NULL)return false;if(pRoot1->m_nValue != pRoot2->m_nValue)return false;return DoesTree1HaveTree2(pRoot1->m_pLeft,pRoot2->m_pLeft) &&DoesTree1HaveTree2(pRoot1->m_pRight,pRoot2->m_pRight);
}
bool HasSubTree(BinaryTreeNode *pRoot1,BinaryTreeNode *pRoot2)
{bool result = false;if(pRoot1 != NULL && pRoot2 != NULL){if(pRoot1->m_nValue == pRoot2->m_nValue)result = DoesTree1HaveTree2(pRoot1,pRoot2);if(!result)result = HasSubTree(pRoot1->m_pLeft,pRoot2);if(!result)result = HasSubTree(pRoot1->m_pRight,pRoot2);}return result;
}


这篇关于剑指Offer18树的子结构的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1100225

相关文章

JD 1520:树的子结构

OJ题目:click here~~ 剑指offer 面试题18 AC_CODE const int maxn = 1008 ;const int maxm = 1008 ;int m , n ;struct Node{int x ;int l ;int r ;Node():l(-1),r(-1){}}A[maxn] , B[maxm];vector<int> g ;void F

剑指offer:树的子结构(Python)

题目描述 输入两棵二叉树A,B,判断B是不是A的子结构。(ps:我们约定空树不是任意一个树的子结构) # -*- coding:utf-8 -*-# class TreeNode:# def __init__(self, x):# self.val = x# self.left = None# self.right = None

树02--树的子结构

树02--树的子结构-jz17 题目概述解析&参考答案注意事项说明 题目概述 算法说明 给定一个二叉树和其中的一个结点,请找出中序遍历顺序的下一个结点并且返回。注意,树中的结点不仅包含左右子结点,同时包含指向父结点的指针。测试用例 {8,8,7,9,2,#,#,#,#,4,7},{8,9,2} {8,8,7,9,3,#,#,#,#,4,7},{8,9,2} {8,8,#,9,#,

15 树的子结构: 输入两棵二叉树A 和B,判断B 是不是A 的子结构。

一、题目 输入两棵二叉树A 和B,判断B 是不是A 的子结构。 二、解题思路 要查找树A 中是否存在和树B 结构一样的子树,我们可以分成两步: 第一步在树A 中找到和B 的根结点的值一样的结点R, 第二步再判断树A 中以R 为根结点的子树是不是包含和树B 一样的结构。 public class Test {/*** 二叉树的树结点*/public static class BinaryTr

【剑指offer】之树的子结构

 题目描述:       输入两颗二叉树A,B,判断B是不是A的子结构。如下图:     分析:      第一步在A树中查找与B子树跟节点一样的节点,第二步判断跟节点一样的A树节点的结构是否与B中的结构一样。 java代码实现:     //判断子树2是否是树1的子树public boolean isSubTree(Node root1, Node roo

剑指offer:输入两棵二叉树A,B,判断B是不是A的子结构(Python)

题目描述 输入两棵二叉树A,B,判断B是不是A的子结构。(ps:我们约定空树不是任意一个树的子结构) 解题思路 我的弯路 分别获取A和B的前序遍历数组和中序遍历数组——> 比较B的前序遍历数组是否按序在A的前序遍历数组中;比较B的中序遍历数组是否按序在A的中序遍历数组中; 正确思路 遍历二叉树A,定位B的根节点在A中的可能位置——> 定位后,验证B是不是A当前位置的子结构。 Pyth

剑指offer——树的子结构(26题)

题目:输入两棵二叉树A和B,判断B是不是A的子结构。 老生常谈,有关二叉树的题型解答,离不开遍历算法,此题又可以看成是用中序遍历改进法来解答。 其思路如下: i、先从A树的根节点开始,一一与B树的节点对应匹配比较; ii、如i不成功,则遍历根的左儿子,重复i过程; iii、如ii不成功,则遍历根的右儿子,重复i过程。 代码实现如下: #include<iostream>#inclu

判断B是否是A的子结构

题目描述 输入两棵二叉树A,B,判断B是不是A的子结构。(ps:我们约定空树不是任意一个树的子结构) public class Solution {public boolean HasSubtree(TreeNode root1,TreeNode root2) {if(root2==null) return false;if(root1==null && root2!=null) return

外汇兑换问题的最优子结构分析

外汇兑换问题的最优子结构分析 一、 当所有交易佣金为零时1.1 伪代码示例:1.2 C代码示例 二、 佣金不为零时的最优子结构性质三、 结论 在考虑外汇兑换问题时,我们面临的是如何通过一系列兑换操作,以最小的成本将一种货币转换为另一种货币。这个问题可以通过动态规划的方法来解决,特别是当交易佣金为零时。在本节中,我们将首先证明当所有交易的佣金为零时,最优兑换序列问题具有最优子结构性质。

面试题20:树的子结构(offer)

题目: 输入两棵二叉树A和B,判断B是不是A的子结构。二叉树结点定义如下: struct BinaryTreeNode{int value;BinaryTreeNode *left;BinaryTreeNode *right;}; 边界条件: B为空,返回真。 A为空,返回假。 思路: 1.先找到B的头结点在A中的位置,如果没找到,返回假。 2.找到位置后递归进行判断。 时