二叉树建立记录(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";
    }
}

  

时间: 2024-12-28 08:42:21

二叉树建立记录(PHP实现)的相关文章

二叉树建立和遍历

二叉树创建遍历规则: 1.先序:根-左-右 2.中序:左-根-右 3.后序:左-右-根 二叉树定义和辅助函数如下: struct node { int data; struct node* left; struct node* right; }; void visit(int data) { printf("%d ", data); } int indata() { int data; scanf("%d",&data); return data; } 先序

二叉树建立

二叉树建立算法 #include<stdio.h> #include<stdlib.h> typedef struct BiTNode { int val; struct BiTNode *lchild,*rchild; }BiTNode; void create1(BiTNode **r)//用两个星,这样才可以修改指针 { int val; scanf("%d ",&val); if(val=-9999) *r=NULL; else { *r=(Bi

二叉树基本操作续一:二叉树建立、节点数统计

在上一篇:二叉树基本操作 中,我们描述了二叉树的递归遍历函数.在这里主要是给出这些函数的测试代码,为了测试更加方便,我们实现了三个新的函数:建立二叉树.统计二叉树叶子节点数量.统计二叉树总节点数量.(二叉树的定义用上篇文章中的定义) 二叉树建立: 1 tree_pointer create_bin_tree() 2 { 3 tree_pointer node; 4 int x; 5 scanf("%d", &x); 6 if (x == 0) { 7 node = NULL;

数据结构二叉树——建立二叉树、中序递归遍历、非递归遍历、层次遍历

数据结构二叉树-- 编写函数实现:建立二叉树.中序递归遍历.借助栈实现中序非递归遍历.借助队列实现层次遍历.求高度.结点数.叶子数及交换左右子树. ("."表示空子树) #include<stdio.h> #include<stdlib.h> //***********二叉树链表节点结构 typedef char DataType; typedef struct Node {  DataType data;  struct Node*LChild;  struc

二叉树建立,遍历和二叉排序树的判断【c++】

// test.cpp : Defines the entry point for the console application. // #include "stdafx.h" #include <iostream> using namespace std; typedef struct BTree{ char val; struct BTree *lchild,*rchild; }BTree; //先序建立二叉树 BTree * CreateBTree(BTree *T

递归二叉树建立和遍历及深度计算

上篇咱们说到二叉树的一种建立方法及三种遍历方法的递归非递归算法.这篇换了一种新的建立方法,用先根遍历递归的思路建立二叉树,用递归的方法计算深度,用中根递归和非递归方法遍历整个二叉树. BinaryTree.h //二叉树的建立和遍历 #ifndef BINARYTREE_H_ #define BINARYTREE_H_ #include <iostream> typedef int T; struct Node { T data; Node *lch; Node *rch; }; class

第八十六题(搜索二叉树建立)

如何编写一个程序,把一个有序整数数组放到二叉树中? 分析:为了让搜索二叉树的查找等操作接近于O(log(n)).我们以有序数组的中间位置的数字作为搜索二叉树的根节点,以其左半部分数据建立搜索二叉树作为根节点的左子树.以其有半部分数据建立搜索二叉树作为根节点的右子树.这是一个递归的定义,因此程序也採用递归实现. #include<iostream> using namespace std; namespace MS100P_86 { struct BSTree { int data; BSTre

二叉树 - 建立与遍历使用Java

二叉树的遍历(traversing binary tree)是指从根节点出发,按照某种次序依次访问二叉树中所有节点,使得每个节点仅被访问一次 前序遍历:若二叉树为空,则空操作返回null.否则先访问根节点,然后前序遍历左子树,再前序遍历右子树 中序遍历:若二叉树为空,则空操作返回null.否则从根节点开始,中序遍历根节点左子树,然后访问根节点,最后中序遍历右子树 后序遍历:若二叉树为空,则空操作返回null.否则以从左到右先叶子后节点的方式遍历访问左右子树,最后访问根节点 层序遍历:若树为空,空

二叉树建立以及递归、非递归遍历

#include"stdio.h" #include"malloc.h" #include"stdlib.h" typedef struct lNode { char data; struct lNode *lchild; struct lNode *rchild; }LNODE,*Tree; typedef  struct Node { Tree data; struct Node * Next; }NODE, * PNODE; typedef