二叉树建立记录(PHP实现)

前段时间一直在看算法问题,现在把研究的结果贴出来。

1.建立普通二叉树

<?php


class Node {
    public $value = 0;

    public $l = null;
    public $r = null;
};


//构建树
function buildTree($a, $low, $high) {
    if ($low > $high) {
        return null;
    }

    $m = floor(($low + $high)/2);
    $node = new Node;
    $node->value = $a[$m];

    $l = buildTree($a, $low, $m-1);
    $r = buildTree($a, $m+1, $high);
    $node->l = $l;
    $node->r = $r;
    return $node;
}

  2.建立有序二叉树

<?php


class Node {
    public $value = 0;

    public $l = null;
    public $r = null;
};

// 有序二叉树
function insertOrderTree($T, $value) {
    if ($T->value == $value) {
        return;
    }
    if ($T->value > $value) {
        if ($T->l == null) {
            $node = new Node();
            $node->value = $value;
            $T->l = $node;
        } else {
            insertOrderTree($T->l, $value);
        }
    } else {
        if ($T->r == null) {
            $node = new Node();
            $node->value = $value;
            $T->r = $node;
        } else {
            insertOrderTree($T->r, $value);
        }
    }
}



function buildOrderTree($seq) {
    $R = new Node();
    $R->value = 5;
    foreach ($seq as $value) {
        insertOrderTree($R, $value);
    }
    return $R;
}

  3.对二叉树的遍历

// 中序遍历
function travel($T) {
    if ($T == null) {
        return;
    }
    echo $T->value, "\n";
    travel($T->l);
    travel($T->r);

}

// 先序遍历
function inTravel($T) {
    if ($T == null) {
        return;
    }
    inTravel($T->l);
    echo $T->value, "\n";
    inTravel($T->r);
}

//后序遍历
function postTravel($T) {
    if ($T == null) {
        return;
    }
    postTravel($T->l);
    postTravel($T->r);
    echo $T->value, "\n";

}

// 层级遍历
function levelTravel($T) {
    $q = array();
    array_push($q, $T);
    while(!empty($q)) {
        $node = array_shift($q);
        if ($node->l) {
            array_push($q, $node->l);
        }
        if ($node->r) {
            array_push($q, $node->r);
        }
        echo $node->value, "\n";
    }
}

  

 

posted @ 2015-08-28 19:23  木子点点  阅读(342)  评论(0编辑  收藏  举报