【40】二叉树子结构

简介: 题目:输入两个二叉树A和B的根节点,判断二叉树B是否为A的子结构分析:1. 两个二叉树如下所示                      A树                                                                    B树    2. 要查找树A中是否包含数B一样的子结构,我们可以分成两步。


题目:输入两个二叉树A和B的根节点,判断二叉树B是否为A的子结构


分析:

1. 两个二叉树如下所示

                      A树                                                                    B树

    


2. 要查找树A中是否包含数B一样的子结构,我们可以分成两步。

   (1)第一步:先在树A中找到和树B的根节点的值一样的结点

   (2)第二步:判断从A中找到的和树B根节点的值一样的结点是否包含树B一样的结构


3. 例如上面的两颗子树中,树A中总共有两个值为8的结点,因为我们要判断两次是否B为A的子结构。



代码:

//二叉树结点
struct BinaryTreeNode{
    int value;
    BinaryTreeNode *lsonNode;
    BinaryTreeNode *rsonNode;
}; 

//第二步 :判断是否满足 
bool IsOk(BinaryTreeNode *root1, BinaryTreeNode *root2){
    //空树 
	if(root2 == NULL){
       return true;
	}
	if(root1 == NULL){
       return false;
	}
	//结点值不同肯定不是子树 
	if(root1->value != root2->value){
       return false;
	}
	else{
       return IsOk(root1->lsonNode, root2->lsonNode)
            &&IsOk(root1->rsonNode, root2->rsonNode);
	}
} 

//第一步:枚举树A判断B是不是子结构
bool IsSubTree(BinaryTreeNode *rootOne, BinaryTreeNode *rootTwo){
    //树为空的情况 
	if(rootTwo == NULL){
       return true;
    }
    if(rootOne == NULL){
       return false;
	}
	//根节点值一样 
    if(rootOne->value == rootTwo->value){
       //判断树A是否包含树B 
       if(IsOk(rootOne, rootTwo)){
          return true;
	   }
	}
    return IsSubTree(rootOne->lsonNode, rootTwo)
         ||IsSubTree(rootOne->rsonNode, rootTwo); 
} 


目录
相关文章
|
存储 C++
二叉树搜索树的应用
二叉树搜索树的应用
75 1
【剑指offer】-树的子结构-17/67
【剑指offer】-树的子结构-17/67
|
9月前
|
算法 程序员
【算法训练-二叉树 二】【重建二叉树】依据前序与中序遍历序列重建二叉树
【算法训练-二叉树 二】【重建二叉树】依据前序与中序遍历序列重建二叉树
90 0
|
8月前
|
Python
如何画一棵树
如何画一棵树
|
9月前
|
人工智能 算法 BI
【深度优先搜索】【C++算法】834 树中距离之和
【深度优先搜索】【C++算法】834 树中距离之和
|
算法
修理牧场( 哈夫曼算法 ,贪心 )
修理牧场( 哈夫曼算法 ,贪心 )
218 0
剑指offer 25. 树的子结构
剑指offer 25. 树的子结构
73 0
剑指offer_二叉树---树的子结构
剑指offer_二叉树---树的子结构
77 0
|
算法 前端开发 程序员
树的子结构
树的子结构
树的子结构
|
机器学习/深度学习 存储 算法

热门文章

最新文章