在php中二叉树怎么用

fiy 其他 79

回复

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

    在PHP中,可以使用类实现二叉树数据结构。下面是一个简单的示例:

    “`php
    // 定义二叉树节点类
    class Node {
    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() {
    $this->root = null;
    }

    // 向二叉树插入节点
    public function insert($data) {
    $newNode = new Node($data);
    if ($this->root === null) {
    $this->root = $newNode;
    } else {
    $current = $this->root;
    while (true) {
    if ($data < $current->data) {
    if ($current->left === null) {
    $current->left = $newNode;
    break;
    }
    $current = $current->left;
    } else {
    if ($current->right === null) {
    $current->right = $newNode;
    break;
    }
    $current = $current->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();
    $tree->insert(5);
    $tree->insert(3);
    $tree->insert(7);
    $tree->insert(1);
    $tree->insert(4);
    $tree->insert(6);
    $tree->insert(8);

    echo “前序遍历: “;
    $tree->preOrderTraversal($tree->root);

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

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

    以上代码实现了一个简单的二叉树数据结构,并提供了前序、中序和后序遍历的方法。你可以根据自己的需求进一步在二叉树类中添加其他操作。

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

    在PHP中,可以使用类或者数组来实现二叉树的数据结构。下面是一个使用类来实现二叉树的示例代码:

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

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

    class BinaryTree {
    public $root;

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

    public function insert($item) {
    $newNode = new Node($item);

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

    public function inOrder($node) {
    if ($node != null) {
    $this->inOrder($node->left);
    echo $node->data . ” “;
    $this->inOrder($node->right);
    }
    }

    public function preOrder($node) {
    if ($node != null) {
    echo $node->data . ” “;
    $this->preOrder($node->left);
    $this->preOrder($node->right);
    }
    }

    public function postOrder($node) {
    if ($node != null) {
    $this->postOrder($node->left);
    $this->postOrder($node->right);
    echo $node->data . ” “;
    }
    }
    }

    $tree = new BinaryTree();
    $tree->insert(5);
    $tree->insert(3);
    $tree->insert(2);
    $tree->insert(4);
    $tree->insert(7);
    $tree->insert(6);
    $tree->insert(8);

    echo “InOrder traversal: “;
    $tree->inOrder($tree->root);
    echo “\n”;

    echo “PreOrder traversal: “;
    $tree->preOrder($tree->root);
    echo “\n”;

    echo “PostOrder traversal: “;
    $tree->postOrder($tree->root);
    echo “\n”;
    “`

    在上面的示例中,首先定义了一个`Node`类,用于表示二叉树中的节点。每个节点包含一个数据项以及指向左子树和右子树的指针。

    然后定义了一个`BinaryTree`类,其中包含了二叉树的根节点。通过`insert`方法插入新的节点,`inOrder`、`preOrder`和`postOrder`分别实现了二叉树的中序遍历、前序遍历和后序遍历。

    最后创建了一个`BinaryTree`对象,并插入一些节点,然后进行了三种遍历方式的输出。

    这个示例代码展示了如何使用类来构建二叉树,并对其进行遍历操作。通过这些操作,可以实现二叉树的常见功能,比如查找、插入、删除和遍历等。

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

    在php中,可以使用类来实现二叉树的数据结构。下面是使用面向对象的方法来实现二叉树的操作流程:

    1.定义节点类:
    “`
    class Node {
    public $data;
    public $left;
    public $right;

    public function __construct($data) {
    $this->data = $data;
    $this->left = null;
    $this->right = null;
    }
    }
    “`
    2.定义二叉树类:
    “`
    class BinaryTree {
    public $root;

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

    // 向二叉树中插入节点
    public function insert($data) {
    $node = new Node($data);

    if ($this->root == null) {
    $this->root = $node;
    } else {
    $this->insertNode($node, $this->root);
    }
    }

    // 递归地插入节点
    private function insertNode($node, &$subtree) {
    if ($subtree == null) {
    $subtree = $node;
    } else {
    if ($node->data < $subtree->data) {
    $this->insertNode($node, $subtree->left);
    } else {
    $this->insertNode($node, $subtree->right);
    }
    }
    }

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

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

    // 后序遍历二叉树
    public function postorderTraversal($subtree) {
    if ($subtree != null) {
    $this->postorderTraversal($subtree->left);
    $this->postorderTraversal($subtree->right);
    echo $subtree->data . ” “;
    }
    }
    }
    “`
    3.使用二叉树:
    “`
    $tree = new BinaryTree();
    $tree->insert(4);
    $tree->insert(2);
    $tree->insert(7);
    $tree->insert(5);
    $tree->insert(1);

    echo “先序遍历:”;
    $tree->preorderTraversal($tree->root);
    echo “
    “;

    echo “中序遍历:”;
    $tree->inorderTraversal($tree->root);
    echo “
    “;

    echo “后序遍历:”;
    $tree->postorderTraversal($tree->root);
    echo “
    “;
    “`
    输出结果为:
    “`
    先序遍历:4 2 1 7 5
    中序遍历:1 2 4 5 7
    后序遍历:1 2 5 7 4
    “`
    通过以上方法,我们可以在php中使用二叉树,并实现插入节点以及三种遍历的操作。

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

400-800-1024

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

分享本页
返回顶部