二叉树用php怎么存储

不及物动词 其他 91

回复

共3条回复 我来回复
  • fiy的头像
    fiy
    Worktile&PingCode市场小伙伴
    评论

    在PHP中,可以使用类来实现二叉树的存储。具体步骤如下:

    首先,我们需要定义一个节点类来表示二叉树的节点。节点类包括三个属性:节点的值、左子节点和右子节点。代码实现如下:

    “`php
    class TreeNode {
    public $val;
    public $left;
    public $right;

    public function __construct($val = null) {
    $this->val = $val;
    $this->left = null;
    $this->right = null;
    }
    }
    “`

    接下来,我们可以定义一个类来表示二叉树。该类包括一个根节点属性和相关的操作方法。代码实现如下:

    “`php
    class BinaryTree {
    public $root;

    public function __construct() {
    $this->root = null;
    }

    public function insert($val) {
    $node = new TreeNode($val);

    if ($this->root === null) {
    $this->root = $node;
    } else {
    $current = $this->root;
    while (true) {
    if ($val < $current->val) {
    if ($current->left === null) {
    $current->left = $node;
    break;
    }
    $current = $current->left;
    } else {
    if ($current->right === null) {
    $current->right = $node;
    break;
    }
    $current = $current->right;
    }
    }
    }
    }

    // 其他操作方法,如查找、删除节点等
    }
    “`

    使用以上定义的类,可以通过调用`insert`方法将节点插入二叉树中。例如:

    “`php
    $tree = new BinaryTree();
    $tree->insert(5);
    $tree->insert(3);
    $tree->insert(7);
    $tree->insert(1);
    $tree->insert(4);
    $tree->insert(6);
    $tree->insert(8);
    “`

    通过以上代码,我们成功地将节点插入了二叉树中。以这种方式,我们可以构建一个二叉树并进行相关的操作。

    2年前 0条评论
  • 不及物动词的头像
    不及物动词
    这个人很懒,什么都没有留下~
    评论

    在PHP中,可以使用类来实现二叉树的存储和操作。以下是一种常见的方式:

    1. 定义节点类:首先定义一个节点类,用于表示二叉树的节点。节点类包含三个属性:节点值、左子节点和右子节点。

    “`php
    class Node {
    public $value;
    public $left;
    public $right;

    public function __construct($value) {
    $this->value = $value;
    $this->left = null;
    $this->right = null;
    }
    }
    “`

    2. 构建二叉树:通过创建节点对象,并设置它们之间的关系,可以构建二叉树。以下是一个简单的示例:

    “`php
    // 构建二叉树
    $root = new Node(1);
    $root->left = new Node(2);
    $root->right = new Node(3);
    $root->left->left = new Node(4);
    $root->left->right = new Node(5);
    $root->right->left = new Node(6);
    $root->right->right = new Node(7);
    “`

    根节点为 1,左子节点为 2,右子节点为 3,依此类推。

    3. 遍历二叉树:使用递归的方式来实现二叉树的遍历。以下是前序遍历、中序遍历和后序遍历的实现方法。

    前序遍历:首先访问根节点,然后遍历左子树,最后遍历右子树。

    “`php
    function preorderTraversal($node) {
    if ($node == null) {
    return;
    }

    echo $node->value . ” “;
    preorderTraversal($node->left);
    preorderTraversal($node->right);
    }
    “`

    中序遍历:首先遍历左子树,然后访问根节点,最后遍历右子树。

    “`php
    function inorderTraversal($node) {
    if ($node == null) {
    return;
    }

    inorderTraversal($node->left);
    echo $node->value . ” “;
    inorderTraversal($node->right);
    }
    “`

    后序遍历:首先遍历左子树,然后遍历右子树,最后访问根节点。

    “`php
    function postorderTraversal($node) {
    if ($node == null) {
    return;
    }

    postorderTraversal($node->left);
    postorderTraversal($node->right);
    echo $node->value . ” “;
    }
    “`

    4. 查找节点:可以实现一个函数来在二叉树中查找指定节点的值。以下是一个简单的示例:

    “`php
    function searchNode($node, $target) {
    if ($node == null || $node->value == $target) {
    return $node;
    }

    $leftResult = searchNode($node->left, $target);

    if ($leftResult != null) {
    return $leftResult;
    }

    return searchNode($node->right, $target);
    }
    “`

    5. 插入和删除节点:可以实现函数来向二叉树中插入或删除节点。以下是一个简单的示例:

    插入节点:

    “`php
    function insertNode($node, $value) {
    if ($node == null) {
    return new Node($value);
    }

    if ($value < $node->value) {
    $node->left = insertNode($node->left, $value);
    } else {
    $node->right = insertNode($node->right, $value);
    }

    return $node;
    }
    “`

    删除节点:

    “`php
    function deleteNode($node, $value) {
    if ($node == null) {
    return $node;
    }

    if ($value < $node->value) {
    $node->left = deleteNode($node->left, $value);
    } else if ($value > $node->value) {
    $node->right = deleteNode($node->right, $value);
    } else {
    if ($node->left == null && $node->right == null) {
    $node = null;
    } else if ($node->left == null) {
    $node = $node->right;
    } else if ($node->right == null) {
    $node = $node->left;
    } else {
    $minNode = findMinNode($node->right);
    $node->value = $minNode->value;
    $node->right = deleteNode($node->right, $minNode->value);
    }
    }

    return $node;
    }

    function findMinNode($node) {
    while ($node->left != null) {
    $node = $node->left;
    }

    return $node;
    }
    “`

    通过以上方法,我们可以在PHP中存储和操作二叉树。可以根据需要进一步扩展和改进这些方法。

    2年前 0条评论
  • worktile的头像
    worktile
    Worktile官方账号
    评论

    在PHP中,可以通过定义一个二叉树类来存储二叉树。下面是一个示例的PHP代码来实现二叉树的存储:

    “`php
    class BinaryTreeNode {
    public $data; // 存储节点的数据
    public $left; // 左子节点
    public $right; // 右子节点

    public function __construct($data) {
    $this->data = $data;
    $this->left = null;
    $this->right = null;
    }
    }

    class BinaryTree {
    public $root; // 二叉树的根节点

    public function __construct($data) {
    $this->root = new BinaryTreeNode($data);
    }

    // 向二叉树插入节点
    public function insert($data) {
    $newNode = new BinaryTreeNode($data);
    if ($this->root == null) {
    $this->root = $newNode;
    } else {
    $this->insertNode($newNode, $this->root);
    }
    }

    private function insertNode($newNode, &$node) {
    if ($node == null) {
    $node = $newNode;
    } else {
    // 比较新节点和当前节点的值,决定插入左子树还是右子树
    if ($newNode->data < $node->data) {
    $this->insertNode($newNode, $node->left);
    } else {
    $this->insertNode($newNode, $node->right);
    }
    }
    }

    // 前序遍历二叉树
    public function preOrderTraversal($node) {
    if ($node != null) {
    echo $node->data . ” “;
    $this->preOrderTraversal($node->left);
    $this->preOrderTraversal($node->right);
    }
    }

    // 中序遍历二叉树
    public function inOrderTraversal($node) {
    if ($node != null) {
    $this->inOrderTraversal($node->left);
    echo $node->data . ” “;
    $this->inOrderTraversal($node->right);
    }
    }

    // 后序遍历二叉树
    public function postOrderTraversal($node) {
    if ($node != null) {
    $this->postOrderTraversal($node->left);
    $this->postOrderTraversal($node->right);
    echo $node->data . ” “;
    }
    }
    }

    // 创建一个二叉树对象
    $tree = new BinaryTree(5);

    // 插入节点
    $tree->insert(3);
    $tree->insert(8);
    $tree->insert(2);
    $tree->insert(4);
    $tree->insert(6);
    $tree->insert(9);

    // 前序遍历
    echo “前序遍历结果:”;
    $tree->preOrderTraversal($tree->root);
    echo “\n”;

    // 中序遍历
    echo “中序遍历结果:”;
    $tree->inOrderTraversal($tree->root);
    echo “\n”;

    // 后序遍历
    echo “后序遍历结果:”;
    $tree->postOrderTraversal($tree->root);
    echo “\n”;
    “`

    上述代码中,首先定义了一个`BinaryTreeNode`类来表示二叉树的节点,具有三个成员变量`data`、`left`和`right`分别表示节点的数据、左子节点和右子节点。

    然后定义了一个`BinaryTree`类来表示二叉树,具有一个成员变量`root`表示二叉树的根节点。通过构造函数来创建一个二叉树,并将传入的数据作为根节点的数据。

    在`BinaryTree`类中,提供了一个`insert`方法来插入节点。在插入节点时,通过比较新节点和当前节点的值,决定将新节点插入到左子树还是右子树。

    同时,还提供了三种不同的遍历方法:前序遍历、中序遍历和后序遍历。这些遍历方法都是递归实现的,并按照遍历的顺序打印节点的数据。

    最后,在创建一个二叉树对象后,可以调用插入节点的方法来插入节点,并使用遍历方法来遍历节点并打印节点的数据。

    2年前 0条评论
注册PingCode 在线客服
站长微信
站长微信
电话联系

400-800-1024

工作日9:30-21:00在线

分享本页
返回顶部