


PHP implements non-recursive binary tree traversal and stack simulation implementation
The definition of a binary tree is as follows: a non-empty binary tree consists of three basic parts: the root node and the left and right subtrees. There are three traversal methods depending on the access position of the node:
① NLR: Preorder Traversal (also known as Preorder Traversal)
——The operation of accessing a node occurs before traversing its left and right subtrees.
② LNR: Inorder Traversal (InorderTraversal)
——The operation of accessing a node occurs by traversing its left and right subtrees (between).
③ LRN: Postorder Traversal
——The operation of accessing a node occurs after traversing its left and right subtrees.
As shown below:
Binary trees were previously written in C, and recursive traversal can also be simply simulated with PHP. The following example is considered the simplest kind of traversal (refer to the Internet).
<code><span>/** * 二叉树遍历 * @blog<http:> */</http:></span> class Node { <span>public</span><span>$value</span>; <span>public</span><span>$left</span>; <span>public</span><span>$right</span>; } <span>//前序遍历,访问根节点->遍历子左树->遍历右左树</span> function preorder(<span>$root</span>){ <span>$stack</span><span>=</span><span>array</span>(); array_push(<span>$stack</span>, <span>$root</span>); <span>while</span>(<span>!</span>empty(<span>$stack</span>)){ <span>$center_node</span><span>=</span> array_pop(<span>$stack</span>); echo <span>$center_node</span><span>-></span>value<span>.</span><span>' '</span>; <span>if</span>(<span>$center_node</span><span>-></span>right <span>!=</span><span>null</span>) array_push(<span>$stack</span>, <span>$center_node</span><span>-></span>right); <span>if</span>(<span>$center_node</span><span>-></span>left <span>!=</span><span>null</span>) array_push(<span>$stack</span>, <span>$center_node</span><span>-></span>left); } } <span>//中序遍历,遍历子左树->访问根节点->遍历右右树</span> function inorder(<span>$root</span>){ <span>$stack</span><span>=</span><span>array</span>(); <span>$center_node</span><span>=</span><span>$root</span>; <span>while</span> (<span>!</span>empty(<span>$stack</span>) <span>||</span><span>$center_node</span><span>!=</span><span>null</span>) { <span>while</span> (<span>$center_node</span><span>!=</span><span>null</span>) { array_push(<span>$stack</span>, <span>$center_node</span>); <span>$center_node</span><span>=</span><span>$center_node</span><span>-></span>left; } <span>$center_node</span><span>=</span> array_pop(<span>$stack</span>); echo <span>$center_node</span><span>-></span>value <span>.</span><span>" "</span>; <span>$center_node</span><span>=</span><span>$center_node</span><span>-></span>right; } } <span>//后序遍历,遍历子左树->访问子右树->遍历根节点</span> function postorder(<span>$root</span>){ <span>$pushstack</span><span>=</span><span>array</span>(); <span>$visitstack</span><span>=</span><span>array</span>(); array_push(<span>$pushstack</span>, <span>$root</span>); <span>while</span> (<span>!</span>empty(<span>$pushstack</span>)) { <span>$center_node</span><span>=</span> array_pop(<span>$pushstack</span>); array_push(<span>$visitstack</span>, <span>$center_node</span>); <span>if</span> (<span>$center_node</span><span>-></span>left <span>!=</span><span>null</span>) array_push(<span>$pushstack</span>, <span>$center_node</span><span>-></span>left); <span>if</span> (<span>$center_node</span><span>-></span>right <span>!=</span><span>null</span>) array_push(<span>$pushstack</span>, <span>$center_node</span><span>-></span>right); } <span>while</span> (<span>!</span>empty(<span>$visitstack</span>)) { <span>$center_node</span><span>=</span> array_pop(<span>$visitstack</span>); echo <span>$center_node</span><span>-></span>value<span>.</span><span>" "</span>; } } <span>//创建如上图所示的二叉树</span><span>$a</span><span>=</span><span>new</span> Node(); <span>$b</span><span>=</span><span>new</span> Node(); <span>$c</span><span>=</span><span>new</span> Node(); <span>$d</span><span>=</span><span>new</span> Node(); <span>$e</span><span>=</span><span>new</span> Node(); <span>$f</span><span>=</span><span>new</span> Node(); <span>$a</span><span>-></span>value <span>=</span><span>'A'</span>; <span>$b</span><span>-></span>value <span>=</span><span>'B'</span>; <span>$c</span><span>-></span>value <span>=</span><span>'C'</span>; <span>$d</span><span>-></span>value <span>=</span><span>'D'</span>; <span>$e</span><span>-></span>value <span>=</span><span>'E'</span>; <span>$f</span><span>-></span>value <span>=</span><span>'F'</span>; <span>$a</span><span>-></span>left <span>=</span><span>$b</span>; <span>$a</span><span>-></span>right <span>=</span><span>$c</span>; <span>$b</span><span>-></span>left <span>=</span><span>$d</span>; <span>$c</span><span>-></span>left <span>=</span><span>$e</span>; <span>$c</span><span>-></span>right <span>=</span><span>$f</span>; <span>//前序遍历</span> preorder(<span>$a</span>); <span>//结果是:A B D C E F</span> inorder(<span>$a</span>); <span>//结果是: D B A E C F</span> postorder(<span>$a</span>); <span>//结果是: D B E F C A</span></code>
').addClass('pre-numbering').hide(); $(this).addClass('has-numbering').parent().append($numbering); for (i = 1; i ').text(i)); }; $numbering.fadeIn(1700); }); });http://www.phpddt.com/php/binary-tree-traverse.html
The above introduces the non-recursive method of binary tree traversal and stack simulation implementation in PHP, including aspects of it. I hope it will be helpful to friends who are interested in PHP tutorials.

Hot AI Tools

Undresser.AI Undress
AI-powered app for creating realistic nude photos

AI Clothes Remover
Online AI tool for removing clothes from photos.

Undress AI Tool
Undress images for free

Clothoff.io
AI clothes remover

AI Hentai Generator
Generate AI Hentai for free.

Hot Article

Hot Tools

Notepad++7.3.1
Easy-to-use and free code editor

SublimeText3 Chinese version
Chinese version, very easy to use

Zend Studio 13.0.1
Powerful PHP integrated development environment

Dreamweaver CS6
Visual web development tools

SublimeText3 Mac version
God-level code editing software (SublimeText3)

Hot Topics
![Acer Care Center service is still initializing [Fixed]](https://img.php.cn/upload/article/000/465/014/171055772117927.jpg?x-oss-process=image/resize,m_fill,h_207,w_330)
This article will guide you to solve the problem of Acer Care Center service initialization error message on Windows PC. When the AcerCareCenter app fails to launch properly, it's usually because the app is corrupted, outdated, or conflicts with other software. Fix Acer Care Center Service Still Initializing Error If you see the AcerCare Center Service Still Initializing error message on your Windows 11/10 PC, use the following suggestions to resolve the issue: Restart the ACCStd.exe process Run AcerCareCenter as Administrator Temporarily disable your Antivirus software Check clean boot status Reinstall Acer Care Contact support

Many users will choose the Huawei brand when choosing smart watches. Among them, Huawei GT3pro and GT4 are very popular choices. Many users are curious about the difference between Huawei GT3pro and GT4. Let’s introduce the two to you. . What are the differences between Huawei GT3pro and GT4? 1. Appearance GT4: 46mm and 41mm, the material is glass mirror + stainless steel body + high-resolution fiber back shell. GT3pro: 46.6mm and 42.9mm, the material is sapphire glass + titanium body/ceramic body + ceramic back shell 2. Healthy GT4: Using the latest Huawei Truseen5.5+ algorithm, the results will be more accurate. GT3pro: Added ECG electrocardiogram and blood vessel and safety

How to delete node with nvm: 1. Download "nvm-setup.zip" and install it on the C drive; 2. Configure environment variables and check the version number through the "nvm -v" command; 3. Use the "nvm install" command Install node; 4. Delete the installed node through the "nvm uninstall" command.

How to handle file upload? The following article will introduce to you how to use express to handle file uploads in the node project. I hope it will be helpful to you!

Why Snipping Tool Not Working on Windows 11 Understanding the root cause of the problem can help find the right solution. Here are the top reasons why the Snipping Tool might not be working properly: Focus Assistant is On: This prevents the Snipping Tool from opening. Corrupted application: If the snipping tool crashes on launch, it might be corrupted. Outdated graphics drivers: Incompatible drivers may interfere with the snipping tool. Interference from other applications: Other running applications may conflict with the Snipping Tool. Certificate has expired: An error during the upgrade process may cause this issu simple solution. These are suitable for most users and do not require any special technical knowledge. 1. Update Windows and Microsoft Store apps

This article will share with you Node's process management tool "pm2", and talk about why pm2 is needed, how to install and use pm2, I hope it will be helpful to everyone!

Detailed explanation and installation guide for PiNetwork nodes This article will introduce the PiNetwork ecosystem in detail - Pi nodes, a key role in the PiNetwork ecosystem, and provide complete steps for installation and configuration. After the launch of the PiNetwork blockchain test network, Pi nodes have become an important part of many pioneers actively participating in the testing, preparing for the upcoming main network release. If you don’t know PiNetwork yet, please refer to what is Picoin? What is the price for listing? Pi usage, mining and security analysis. What is PiNetwork? The PiNetwork project started in 2019 and owns its exclusive cryptocurrency Pi Coin. The project aims to create a one that everyone can participate

How to package nodejs executable file with pkg? The following article will introduce to you how to use pkg to package a Node project into an executable file. I hope it will be helpful to you!
