zoukankan      html  css  js  c++  java
  • 剑指offer-面试题18.树的子结构

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

    二叉树节点定义如下:

    1 struct BinaryTreeNode
    2 {
    3      int           m_nValue;
    4      BinaryTreeNode* m_pLeft;
    5      BinaryTreeNode* m_pRight;
    6 };

    求子树的思路大概是这样的:

    1.判断树A和树B是否有相同的根节点

    2.如果存在则判断A的子树是是否和B的结构相同

    3.  如果不存在则A继续向下遍历,重复步骤1,2

    第一步递归遍历A树,查找与B数的根元素相同的结点:

     1 bool HasSubtree(BinaryTreeNode* pRoot1,BinaryTreeNode* pRoot2)
     2 {
     3     bool result=false;
     4 
     5     if(pRoot1!=NULL&&pRoot2!=NULL)
     6     {
     7         if(pRoot1->m_nValue==pRoot2->m_nValue)
     8             result=DoestTree1HaveTree2(pRoot1,pRoot2);
     9         if(!result)
    10             result=HasSubtree(pRoot1->m_pLeft,pRoot2);
    11         if(!result)
    12             result=HasSubtree(pRoot1->m_pRight,pRoot2);
    13     }
    14     return result;
    15 }

    第二部同样递归判断A中的以某个节点为根节点的子树是不是和树B具有相同的结构

     1 bool DoesTree1HaveTree2(BinaryTreeNode* pRoot1,BinaryTreeNode* pRoot2)
     2 {
     3     if(pRoot2==NULL)
     4         return true;
     5 
     6     if(pRoot1==NULL)
     7         return false;
     8 
     9     if(pRoot1->m_nValue!=pRoot2->m_nValue)
    10         return false;
    11 
    12     return DoesTree1HaveTree2(pRoot1->m_pLeft,pRoot2->m_pLeft)&&DoesTree1HaveTree2(m_pRoot1->m_pRight,pRoot2->m_pRight);
    13 }
  • 相关阅读:
    C#之流程控制
    UML画图总结以及浅谈UNL九种图
    UML视频总结
    英语总结
    UML coming
    那天我把“小四”拆了
    first 关于文档(总结)
    机房收费需求分析文档
    梦开始的地方
    WebRTC 开发实践:为什么你需要 SFU 服务器
  • 原文地址:https://www.cnblogs.com/vpoet/p/4672879.html
Copyright © 2011-2022 走看看