Maison  >  Article  >  développement back-end  >  Comment implémenter un chemin qui totalise une certaine valeur dans un arbre binaire en PHP (code)

Comment implémenter un chemin qui totalise une certaine valeur dans un arbre binaire en PHP (code)

不言
不言avant
2018-10-11 15:45:312171parcourir

Le contenu de cet article explique comment PHP implémente le chemin (code) qui neutralise un arbre binaire à une certaine valeur. Il a une certaine valeur de référence. Les amis dans le besoin peuvent s'y référer. .

Le chemin dont la somme dans l'arbre binaire est une certaine valeur :

Saisissez le nœud talon d'un arbre binaire et un entier, et imprimez tous les nœuds de l'arbre binaire dont la somme est le chemin entier d’entrée. Un chemin est défini comme un chemin partant du nœud racine de l’arbre et descendant jusqu’aux nœuds en passant par les nœuds feuilles. (Remarque : dans la liste des valeurs de retour, le tableau avec la plus grande longueur de tableau est placé en premier)

Idées :

1 Parcours pré-commandé de l'arbre binaire, ordre gauche et droite.

2 , transmettez la valeur cible target, target-=val

3 target est 0 et les deux gauche et droite sont nulles, atteignant le nœud feuille

4. Deux tableaux en dehors de la fonction, list Le tableau stocke un chemin et le tableau listAll stocke tous les chemins

FindPath(root,target)
    if root==null return listAll
    list[]=root.val
    target-=root.val
    if target==0 && root->left==null && root->right==null
        listAll[]=list
    FindPath(root->left,target)
    FindPath(root->right,target)
    //如果到了这条路径的跟结点,并没有达到目标,就删掉最后的结点,退回上一个结点
    array_pop(list)
    return listAll
<?php
class TreeNode{
    var $val;
    var $left = NULL;
    var $right = NULL;
    function __construct($val){
        $this->val = $val;
    }   
}

function FindPath($root,$target)
{
        static $list=array();
        static $listAll=array();
        if($root==null){
                return $listAll;
        }   
        $target-=$root->val;
        $list[]=$root->val;
        if($target==0 && $root->left==null && $root->right==null){
                $listAll[]=$list;
        }   
        FindPath($root->left,$target);
        FindPath($root->right,$target);
        array_pop($list);
        return $listAll;
}

$node10=new TreeNode(10);
$node5=new TreeNode(5);
$node12=new TreeNode(12);
$node4=new TreeNode(4);
$node7=new TreeNode(7);

$node10->left=$node5;
$node10->right=$node12;
$node5->left=$node4;
$node5->left=$node7;

$tree=$node10;

$res=FindPath($tree,22);
var_dump($res);
<?php
/*class TreeNode{
    var $val;
    var $left = NULL;
    var $right = NULL;
    function __construct($val){
        $this->val = $val;
    }
}*/
function FindPath($root,$target)
{
    $list=array();
    $listAll=array();
    $res=dfs($root,$target,$list,$listAll);
    return $res;
}

function dfs($root,$target,&$list,&$listAll)
{

        if($root==null){
                return $listAll;
        }   
        $target-=$root->val;
        $list[]=$root->val;
        if($target==0 && $root->left==null && $root->right==null){
                
                $listAll[]=$list;
        }   
        dfs($root->left,$target,$list,$listAll);
        dfs($root->right,$target,$list,$listAll);
        array_pop($list);
        return $listAll;
}

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Cet article est reproduit dans:. en cas de violation, veuillez contacter admin@php.cn Supprimer