search
HomeWeb Front-endJS TutorialDetailed explanation of binary tree of JavaScript data structures and algorithms_Basic knowledge

The concept of binary tree

Binary Tree is a finite set of n (n>=0) nodes. The set is either an empty set (empty binary tree), or it consists of a root node and two mutually disjoint trees. It is a binary tree consisting of the left subtree and the right subtree of the root node.

Characteristics of binary trees

Each node has at most two subtrees, so there is no node with degree greater than 2 in the binary tree. Each node in the binary tree is an object, and each data node has three pointers, which are pointers to the parent, left child, and right child. Each node is connected to each other through pointers. The relationship between connected pointers is a parent-child relationship.

Definition of binary tree node

Binary tree nodes are defined as follows:

Copy code The code is as follows:

struct BinaryTreeNode
{
int m_nValue;
BinaryTreeNode* m_pLeft;
BinaryTreeNode* m_pRight;
};

Five basic forms of binary trees

Empty binary tree
There is only one root node
The root node has only the left subtree
The root node has only the right subtree
The root node has both left and right subtrees

There are only two situations for an ordinary tree with three nodes: two layers or three layers. But since the binary tree needs to distinguish left and right, it will evolve into the following five forms:

Special Binary Tree

Slanted Tree

As shown in the 2nd and 3rd pictures in the last picture above.

Full Binary Tree

In a binary tree, if all branch nodes have left subtrees and right subtrees, and all leaves are on the same level, such a binary tree is called a full binary tree. As shown below:

Complete Binary Tree

A complete binary tree means that the left side of the last level is full, the right side may be full or not, and then the remaining levels are full. A binary tree with depth k and number of nodes 2^k - 1 is a full binary tree (complete binary tree). It is a tree with depth k and no gaps.

The characteristics of a complete binary tree are:

Leaf nodes can only appear on the bottom two levels.

The lowest leaves must be concentrated on the left continuous position.

On the penultimate layer, if there are leaf nodes, they must be in continuous positions on the right.

If the node degree is 1, then the node has only left child.

A binary tree with the same node tree, a complete binary tree has the smallest depth.

Note: A full binary tree must be a complete binary tree, but a complete binary tree is not necessarily a full binary tree.

The algorithm is as follows:

Copy code The code is as follows:

bool is_complete(tree *root)
{
queue q;
tree *ptr;
// Perform breadth-first traversal (level traversal) and put NULL nodes into the queue
q.push(root);
While ((ptr = q.pop()) != NULL)

           q.push(ptr->left); 
           q.push(ptr->right); 
}  

// Determine whether there are any unvisited nodes
While (!q.is_empty())

ptr = q.pop();

// If there are unvisited non-NULL nodes, the tree has holes and is a non-complete binary tree
If (NULL != ptr)
                                                                                                  return false;                                                                                                                                                }  

return true;
}

Properties of binary trees

Property 1 of a binary tree: There are at most 2^(i-1) nodes (i>=1) on the i-th level of the binary tree

Property 2 of binary trees: A binary tree with depth k has at most 2^k-1 nodes (k>=1)

Sequential storage structure of binary tree

The sequential storage structure of a binary tree uses a one-dimensional array to store each node in the binary tree, and the storage location of the nodes can reflect the logical relationship between the nodes.

Binary linked list

Since the applicability of sequential storage is not strong, we must consider the chain storage structure. According to international practice, the storage of binary trees generally uses a chain storage structure.

Each node of a binary tree has at most two children, so it is a natural idea to design a data field and two pointer fields for it. We call such a linked list a binary linked list.

Binary tree traversal

Traversing a binary tree means starting from the root node and visiting all the nodes in the binary tree in a certain order so that each node is visited once and only once.

There are three ways to traverse a binary tree, as follows:

(1) Preorder traversal (DLR), first visit the root node, then traverse the left subtree, and finally traverse the right subtree. The abbreviation root-left-right.

(2) In-order traversal (LDR), first traverses the left subtree, then visits the root node, and finally traverses the right subtree. Abbreviated as left-root-right.

(3) Post-order traversal (LRD), first traverses the left subtree, then traverses the right subtree, and finally visits the root node. Abbreviated as left-right-root.

Preorder traversal:

If the binary tree is empty, no operation returns, otherwise the root node is visited first, then the left subtree is traversed in preorder, and then the right subtree is traversed in preorder.

The order of traversal is: A B D H I E J C F K G

Copy code The code is as follows:

//Pre-order traversal
function preOrder(node){
If(!node == null){
          putstr(node.show() " ");
          preOrder(node.left);
          preOrder(node.right);
}
}

In-order traversal:

If the tree is empty, no operation returns, otherwise starting from the root node (note that the root node is not visited first), traverse the left subtree of the root node in in-order, then visit the root node, and finally Traverse the right subtree in order.

The order of traversal is: H D I B E J A F K C G

Copy code The code is as follows:

//Use recursion to implement in-order traversal
function inOrder(node){
If(!(node ​​== null)){
inOrder(node.left);//Visit the left subtree first
           putstr(node.show() " ");//Visit the root node again
inOrder(node.right);//Last access to the right subtree
}
}

Post-order traversal:

If the tree is empty, the no-op operation returns, otherwise the left and right subtrees are traversed from left to right, first the leaves and then the nodes, and finally the root node is visited.

The order of traversal is: H I D J E B K F G C A

Copy code The code is as follows:

//Post-order traversal
function postOrder(node){
If(!node == null){
PostOrder(node.left);
         postOrder(node.right);
           putStr(node.show() " ");
}
}

Implement binary search tree

Binary search tree (BST) is composed of nodes, so we define a Node node object as follows:

Copy code The code is as follows:

function Node(data,left,right){
This.data = data;
This.left = left;//Save the left node link
This.right = right;
This.show = show;
}


function show(){
Return this.data;//Display the data saved in the node
}

Find the maximum and minimum values

Finding the minimum and maximum values ​​on a BST is very simple because the smaller value is always on the left child node. To find the minimum value on a BST, just traverse the left subtree until the last node is found

Find the minimum value

Copy code The code is as follows:

function getMin(){
var current = this.root;
While(!(current.left == null)){
Current = current.left;
}
Return current.data;
}

This method traverses the left subtree of the BST one by one until it traverses to the leftmost node of the BST, which is defined as:
Copy code The code is as follows:

current.left = null;

At this time, the value saved on the current node is the minimum value

Find the maximum value

Finding the maximum value on BST only requires traversing the right subtree until the last node is found, and the value saved on this node is the maximum value.

Copy code The code is as follows:

function getMax(){
var current = this.root;
While(!(current.right == null)){
            current = current.right;
}
Return current.data;
}
Statement
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn
JavaScript Engines: Comparing ImplementationsJavaScript Engines: Comparing ImplementationsApr 13, 2025 am 12:05 AM

Different JavaScript engines have different effects when parsing and executing JavaScript code, because the implementation principles and optimization strategies of each engine differ. 1. Lexical analysis: convert source code into lexical unit. 2. Grammar analysis: Generate an abstract syntax tree. 3. Optimization and compilation: Generate machine code through the JIT compiler. 4. Execute: Run the machine code. V8 engine optimizes through instant compilation and hidden class, SpiderMonkey uses a type inference system, resulting in different performance performance on the same code.

Beyond the Browser: JavaScript in the Real WorldBeyond the Browser: JavaScript in the Real WorldApr 12, 2025 am 12:06 AM

JavaScript's applications in the real world include server-side programming, mobile application development and Internet of Things control: 1. Server-side programming is realized through Node.js, suitable for high concurrent request processing. 2. Mobile application development is carried out through ReactNative and supports cross-platform deployment. 3. Used for IoT device control through Johnny-Five library, suitable for hardware interaction.

Building a Multi-Tenant SaaS Application with Next.js (Backend Integration)Building a Multi-Tenant SaaS Application with Next.js (Backend Integration)Apr 11, 2025 am 08:23 AM

I built a functional multi-tenant SaaS application (an EdTech app) with your everyday tech tool and you can do the same. First, what’s a multi-tenant SaaS application? Multi-tenant SaaS applications let you serve multiple customers from a sing

How to Build a Multi-Tenant SaaS Application with Next.js (Frontend Integration)How to Build a Multi-Tenant SaaS Application with Next.js (Frontend Integration)Apr 11, 2025 am 08:22 AM

This article demonstrates frontend integration with a backend secured by Permit, building a functional EdTech SaaS application using Next.js. The frontend fetches user permissions to control UI visibility and ensures API requests adhere to role-base

JavaScript: Exploring the Versatility of a Web LanguageJavaScript: Exploring the Versatility of a Web LanguageApr 11, 2025 am 12:01 AM

JavaScript is the core language of modern web development and is widely used for its diversity and flexibility. 1) Front-end development: build dynamic web pages and single-page applications through DOM operations and modern frameworks (such as React, Vue.js, Angular). 2) Server-side development: Node.js uses a non-blocking I/O model to handle high concurrency and real-time applications. 3) Mobile and desktop application development: cross-platform development is realized through ReactNative and Electron to improve development efficiency.

The Evolution of JavaScript: Current Trends and Future ProspectsThe Evolution of JavaScript: Current Trends and Future ProspectsApr 10, 2025 am 09:33 AM

The latest trends in JavaScript include the rise of TypeScript, the popularity of modern frameworks and libraries, and the application of WebAssembly. Future prospects cover more powerful type systems, the development of server-side JavaScript, the expansion of artificial intelligence and machine learning, and the potential of IoT and edge computing.

Demystifying JavaScript: What It Does and Why It MattersDemystifying JavaScript: What It Does and Why It MattersApr 09, 2025 am 12:07 AM

JavaScript is the cornerstone of modern web development, and its main functions include event-driven programming, dynamic content generation and asynchronous programming. 1) Event-driven programming allows web pages to change dynamically according to user operations. 2) Dynamic content generation allows page content to be adjusted according to conditions. 3) Asynchronous programming ensures that the user interface is not blocked. JavaScript is widely used in web interaction, single-page application and server-side development, greatly improving the flexibility of user experience and cross-platform development.

Is Python or JavaScript better?Is Python or JavaScript better?Apr 06, 2025 am 12:14 AM

Python is more suitable for data science and machine learning, while JavaScript is more suitable for front-end and full-stack development. 1. Python is known for its concise syntax and rich library ecosystem, and is suitable for data analysis and web development. 2. JavaScript is the core of front-end development. Node.js supports server-side programming and is suitable for full-stack development.

See all articles

Hot AI Tools

Undresser.AI Undress

Undresser.AI Undress

AI-powered app for creating realistic nude photos

AI Clothes Remover

AI Clothes Remover

Online AI tool for removing clothes from photos.

Undress AI Tool

Undress AI Tool

Undress images for free

Clothoff.io

Clothoff.io

AI clothes remover

AI Hentai Generator

AI Hentai Generator

Generate AI Hentai for free.

Hot Article

R.E.P.O. Energy Crystals Explained and What They Do (Yellow Crystal)
3 weeks agoBy尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Best Graphic Settings
3 weeks agoBy尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. How to Fix Audio if You Can't Hear Anyone
3 weeks agoBy尊渡假赌尊渡假赌尊渡假赌
WWE 2K25: How To Unlock Everything In MyRise
4 weeks agoBy尊渡假赌尊渡假赌尊渡假赌

Hot Tools

MinGW - Minimalist GNU for Windows

MinGW - Minimalist GNU for Windows

This project is in the process of being migrated to osdn.net/projects/mingw, you can continue to follow us there. MinGW: A native Windows port of the GNU Compiler Collection (GCC), freely distributable import libraries and header files for building native Windows applications; includes extensions to the MSVC runtime to support C99 functionality. All MinGW software can run on 64-bit Windows platforms.

DVWA

DVWA

Damn Vulnerable Web App (DVWA) is a PHP/MySQL web application that is very vulnerable. Its main goals are to be an aid for security professionals to test their skills and tools in a legal environment, to help web developers better understand the process of securing web applications, and to help teachers/students teach/learn in a classroom environment Web application security. The goal of DVWA is to practice some of the most common web vulnerabilities through a simple and straightforward interface, with varying degrees of difficulty. Please note that this software

EditPlus Chinese cracked version

EditPlus Chinese cracked version

Small size, syntax highlighting, does not support code prompt function

SublimeText3 Linux new version

SublimeText3 Linux new version

SublimeText3 Linux latest version

SublimeText3 Chinese version

SublimeText3 Chinese version

Chinese version, very easy to use