zoukankan      html  css  js  c++  java
  • 面试题26:树的子结构

    NowCoder

    <?php
    header("content-type:text/html;charset=utf-8");
    /*
     * 输入两棵二叉树A,B,判断B是不是A的子结构。(ps:我们约定空树不是任意一个树的子结构)。 P148
     */
    class TreeNode{
        var $val;
        var $left = NULL;
        var $right = NULL;
        function __construct($val){
            $this->val = $val;
        }
    }
    function HasSubtree($pRoot1, $pRoot2)  //先寻找有没有相同的结点
    {
        if($pRoot1 == null || $pRoot2 == null){
            return null;
        }
        $result = false;
        if($pRoot1->val == $pRoot2->val){
            $result = DoesTree1HasTree2($pRoot1,$pRoot2);//如果有相同的结点,就开始比较B是不是A的子树
            if(!$result){//如果比较失败,就找A的左子树继续找和B相同的结点
                $result = HasSubtree($pRoot1->left, $pRoot2);
            }
            if(!$result){//如果左子树比较失败,就找A的右子树继续找和B相同的结点
                $result = HasSubtree($pRoot1->right, $pRoot2);
            }
    
        }
        return $result;
    }
    
    function DoesTree1HasTree2($pRoot1,$pRoot2){
        if($pRoot2 == null){ //如果结点B为空,证明B是A的子树
            return true;
        }
        if($pRoot1 == null){
            return false;
        }
        if($pRoot1->val != $pRoot2->val){//如果A的值和B的值不等,直接返回false
            return false;
        }
        return DoesTree1HasTree2($pRoot1->left,$pRoot2->left) && DoesTree1HasTree2($pRoot1->right,$pRoot2->right);//继续比较左子树和右子树,得出最终的result
    }
  • 相关阅读:
    【服务器】【Windows】【3】开放服务器端口
    【服务器】【Windows】【2】把jar包做成服务,在Service中管理
    FZU 1753
    poj 1017
    poj 1666
    poj 1132
    ZOJ 2562 More Divisors
    POJ 2992 Divisors
    poj 2773 happy 2006
    poj 2407 Relatives
  • 原文地址:https://www.cnblogs.com/xlzfdddd/p/10198330.html
Copyright © 2011-2022 走看看