JIYIK CN >

Current Location:Home > Learning > ALGORITHM >

In-order descendants in a binary search tree

Author:JIYIK Last Updated:2025/03/18 Views:

The in-order descendant of a binary tree is the next node in the in-order traversal of the binary tree. So, for the last node in the tree, it is NULL. Since the in-order traversal of a binary search tree is a sorted array. The node with the smallest key greater than a given node is defined as its in-order descendant. In a BST, there are two possibilities for an in-order descendant, namely, the node with the smallest value in the right subtree or ancestor of the node. Otherwise, the in-order descendant of the node does not exist.

In-order descendant algorithm in BST algorithm

  • If root= NULL, then succset to NULLand return .
  • If root->data< current->data, then succis current, currentand is current->left.
  • If root->data> current->data, then currentis current->right.
  • If root->data== current->dataand root->right!= NULL, succ= minimum(current->right).
  • return succ.

Diagram of in-order descendants in a BST

Binary Search Tree

3The in-order descendants of are 4, because 3has a right node that is the smallest node 4in the right subtree that is larger than .3

4The sequential descendants of are 5, since 4has no right node, we need to look at its ancestors, where 5is 4the smallest node larger than .

Implementation of BST in-order descendants

#include <iostream>
using namespace std;

class Node {
public:
    int data;
    Node *left, *right;
    Node(int x) {
        this->data = x;
        this->left = this->right = NULL;
    }
};

Node* insert(Node* root, int key)
{
    if (root == NULL) {
        return new Node(key);
    }
    if (key < root->data) {
        root->left = insert(root->left, key);
    }
    else {
        root->right = insert(root->right, key);
    }
    return root;
}

Node* getNextleft(Node* root)
{
    while (root->left) {
        root = root->left;
    }

    return root;
}

void inorderSuccessor(Node* root, Node*& succ, int key)
{

    if (root == NULL) {
        succ = NULL;
        return;
    }

    if (root->data == key)
    {
        if (root->right) {
            succ = getNextleft(root->right);
        }
    }

    else if (key < root->data)
    {
        succ = root;
        inorderSuccessor(root->left, succ, key);
    }
    else {
        inorderSuccessor(root->right, succ, key);
    }
}

int main()
{
    int keys[] = { 1, 5, 8, 2, 6, 3, 7, 4 };
    Node* root = NULL;
    for (int key : keys) {
        root = insert(root, key);
    }
    for (int key : keys)
    {
        Node* prec = NULL;
        inorderSuccessor(root, prec, key);
        if (prec) {
            cout << "Inorder successor of node " << key << " is " << prec->data;
        }
        else {
            cout << "No inorder Successor of node " << key;
        }

        cout << '\n';
    }

    return 0;
}

Algorithmic complexity of finding in-order descendants in BST

Time Complexity

  • Average situation

On average, the time complexity of finding an in-order descendant in a BST is comparable to the height of the binary search tree. On average, the height of a BST is O(logn). This occurs when the resulting BST is a balanced BST. Therefore, the time complexity is [Big Theta]: O(logn).

  • Best Case

The best case is when the tree is a balanced BST. In the best case, the time complexity of deletion is O(logn). It is the same as the time complexity of the average case.

  • Worst case scenario

In the worst case, we may need to go from the root node to the deepest leaf node, which is the entire height of the tree h. If the tree is unbalanced, i.e. it is skewed, the height of the tree may become n, so the worst case time complexity of insertion and search operations is O(n).

Space complexity

Due to the additional space required for the recursive calls, the space complexity of this algorithm is O(h).

For reprinting, please send an email to 1244347461@qq.com for approval. After obtaining the author's consent, kindly include the source as a link.

Article URL:

Related Articles

Learning the Sorting Algorithm - Insertion Sort (Concepts)

Publish Date:2025/03/19 Views:96 Category:ALGORITHM

What is "insertion sort"? The concept is as follows: each time a record to be sorted is inserted into the previously sorted sequence according to its key size, until all records are inserted. Concepts are always somewhat abstract, and can a

Learning path of sorting algorithm - direct insertion sort

Publish Date:2025/03/19 Views:176 Category:ALGORITHM

This article follows up on Insertion Sort (Concepts) and presents the implementation steps and code for direct insertion sort. Since the Concepts section already has a large number of illustrations, it would be a bit long-winded to provide

Learning the sorting algorithm - Binary Insertion Sort

Publish Date:2025/03/19 Views:143 Category:ALGORITHM

This article follows the insertion sort (concept article) and presents the implementation steps and implementation code of the binary insertion sort Binary Insertion Sort Algorithm Steps Treat the first element of the first sequence to be s

The road to learning sorting algorithms - table insertion sort

Publish Date:2025/03/19 Views:194 Category:ALGORITHM

Table insertion sort was briefly mentioned in Insertion sort (concept) . I briefly summarized it and wrote this article. You can refer to it if you need it. Table insertion sort, as the name implies, uses an index table to sort the original

The road to learning sorting algorithms - Hill sort

Publish Date:2025/03/19 Views:52 Category:ALGORITHM

Hill sort is named after the designer of the algorithm, Hill. It is an improvement of Hill on the basis of insertion sort and can be said to be a special insertion sort. Here are the properties of insertion sort: First of all, the insertion

Things about the singleton design pattern

Publish Date:2025/03/19 Views:53 Category:ALGORITHM

The singleton design pattern is one of the most commonly used design patterns. The singleton design pattern, just by its name, you can roughly know its meaning. Single means one; instance means instance object. So a singleton has only one i

The road to learning sorting algorithms - merge sort

Publish Date:2025/03/19 Views:158 Category:ALGORITHM

Let's first look at the definition of merge sort Merge sort is an effective sorting algorithm based on the merge operation. This algorithm is a very typical application of the Divide and Conquer method. Merge the ordered subsequences to obt

The road to learning sorting algorithms - quick sort

Publish Date:2025/03/19 Views:122 Category:ALGORITHM

Quick sort is a sorting algorithm developed by Tony Hall. On average, sorting n items requires O(n log n) comparisons. In the worst case, O(n2) comparisons are required, but this is uncommon. In fact, quick sort is often significantly faste

Scan to Read All Tech Tutorials

Social Media
  • https://www.github.com/onmpw
  • qq:1244347461

Recommended

Tags

Scan the Code
Easier Access Tutorial