美文网首页程序猿阵线联盟-汇总各类技术干货程序员
二叉树算法积累(二叉树镜像/子树判断)

二叉树算法积累(二叉树镜像/子树判断)

作者: 沧州宁少 | 来源:发表于2017-11-29 16:03 被阅读0次

二叉树算法积累

存在二叉树A.B判断二叉树B是否是A的子树。

  • 注意问题边界条件的控制。
  • A为空直接返回False.B为空A不为空直接返回true
  • 先查找A中和B的根节点值相同的节点。
  • 存在则继续递归A中当前节点的左右节点。

废话不多说,直接上代码。如果有错误请指出~ 谢谢

 struct BinaryTreeNode {

   double m_dbValue;
   BinaryTreeNode*m_leftNode;
   BinaryTreeNode*m_rightNode;
};

 bool isEqual(double number1,double number2)
 {
//    return (abs(number1 - number2)<0.000001);
  if ((number1-number2>= - 0.0000001)&&(number1-  number2)<0.0000001) {
      return true;
   }else{
      return false;
}
}

 bool matchSubTree(BinaryTreeNode*pRootA,BinaryTreeNode*pRootB){

   if (pRootA == nullptr) {
      return false;
    }
   if (pRootB == nullptr) {
       return true;
    }
   if (!(isEqual(pRootA->m_dbValue, pRootB->m_dbValue))) {
      return false;
    }
 return matchSubTree(pRootA->m_leftNode, pRootB->m_leftNode)&&matchSubTree(pRootA->m_rightNode, pRootB->m_rightNode);
}


  // 判断B树是否是A树的子树
 bool subTree(BinaryTreeNode*pNodeA,BinaryTreeNode*pNodeB){

     bool result = false;
     if (pNodeA != nullptr&&pNodeB != nullptr) {
    
    //如果根节点相同。则继续遍历左右节点
    if (pNodeA->m_dbValue == pNodeB->m_dbValue) {
        result = matchSubTree(pNodeA, pNodeB);
    }
    // 如果根节点不同,则继续查找
    if (!result) {
        result = subTree(pNodeA->m_leftNode, pNodeB);
    }
    if (!result) {
        result = subTree(pNodeA->m_rightNode, pNodeB);
    }
}
return result;
}

完成一个函数,输入一棵二叉树,输出它的镜像

  • 画图分析可知。所有节点的左右节点交换。主要依靠递归。思路比较简单
     // 求一棵二叉树的镜像
    void exchangeTree(BinaryTreeNode*rootNode){

    if (rootNode == nullptr) {
      return;
    }
    if (rootNode->m_leftNode != nullptr && rootNode->m_rightNode != nullptr) {
    
    BinaryTreeNode*node = rootNode->m_leftNode;
    rootNode->m_leftNode = rootNode->m_rightNode;
    rootNode->m_rightNode = node;
    }
    exchangeTree(rootNode->m_leftNode);
    exchangeTree(rootNode->m_rightNode);
    }

相关文章

  • 二叉树算法积累(二叉树镜像/子树判断)

    二叉树算法积累 存在二叉树A.B判断二叉树B是否是A的子树。 注意问题边界条件的控制。 A为空直接返回False....

  • 9.19~9.20刷题总结

    使二叉树变为其镜像类似先序遍历的方法 判断二叉树是否对称左节点的右子树和右节点的左子树相同 使用递归 实现有Min...

  • 平衡二叉树

    题目描述输入一棵二叉树,判断该二叉树是否是平衡二叉树。 思路法一:每次判断当前树的左右子树高度差,然后判断子树的子...

  • Algorithm小白入门 -- 二叉树

    二叉树二叉树构造二叉树寻找重复子树 1. 二叉树 基本二叉树节点如下: 很多经典算法,比如回溯、动态规划、分治算法...

  • 101. Symmetric Tree

    判断二叉树是否对称 同时遍历左子树和右子树,判断是否对称

  • 18: 二叉树的镜像

    题目描述 操作给定的二叉树,将其变换为源二叉树的镜像。 输入描述 树结构 解题思路 递归判断交换树的左右子树 AC代码

  • 平衡二叉树

    题目:输入一棵二叉树,判断该二叉树是否是平衡二叉树。 思路:平衡二叉树的特点是左子树与右子树的高度相差不大于1,所...

  • 101. Symmetric Tree

    题目 给定一个二叉树的根 root,检查它是否是自身的镜像。 解析 判断左子树和右子树是否相等。(1)非空节点,加...

  • 树--(二叉树、B树、B+树)

    二叉树 二分法形成的树右子树大于左子树,长于左子树平衡二叉树:右子树比左子树高度差不超过1 算法效率 O(logN...

  • LeetCode-101-对称二叉树(迭代法)(python)

    上一篇写了对称二叉树判断的递归解法:即对称子树需要满足:1.两棵子树根节点值相等 2. 左右子树镜像对称这一篇讲解...

网友评论

    本文标题:二叉树算法积累(二叉树镜像/子树判断)

    本文链接:https://www.haomeiwen.com/subject/enxpbxtx.html