繁体   English   中英

在二叉搜索树的所有节点中将 NULL 替换为 -1

[英]Replace NULL with -1 in all nodes of a binary search tree

给定一个二叉搜索树,不要让节点的右指针或左指针或两个指针都指向 NULL,而是让它们指向包含数据值 -1 的节点。(然后 -1 节点依次指向 NULL)。 任何人都可以提供上述代码片段,最好是 C++。

一个解决方案是将 BST 理解为一个数组。

假设您有这棵树,其中-1表示尚不存在的孩子:

在此处输入图像描述

如果我们将节点i的孩子理解为节点2i + 1 (左孩子)和2i + 2 (右孩子),我们可以将这样的树表示为这样的数组:

[5, 3, 8, 2, 4, 6, 9, 1, -1, -1, -1, -1, 7, -1, 10]

这是使用上面的树实现的示例:

#include <iostream>
using namespace std;

struct BST{
    int tree[40];
    BST(){for(int i = 0; i < 40; i++) tree[i] = -1;}
    
    void add(int value){
        int i = 0;
        while(i < 40 && tree[i] != -1){
            if(tree[i] <= value) i = 2 * i + 2;
            else i = 2 * i + 1; 
        }
        tree[i] = value;
    }
};

int main (){
    BST bst;
    bst.add(5); bst.add(3); bst.add(8); bst.add(2); bst.add(4); 
    bst.add(6); bst.add(9); bst.add(1); bst.add(7); bst.add(10); 
    for(int i = 0; i < 40; i++){
        if(bst.tree[i] != -1){
            cout<<bst.tree[i]<<": ["<<bst.tree[2 * i + 1]<<", "<<bst.tree[2 * i + 2]<<"]"<<endl;
        }
    }
}

OUTPUT (节点i :[ i的左孩子, i的右孩子])。

5: [3, 8]
3: [2, 4]
8: [6, 9]
2: [1, -1]
4: [-1, -1]
6: [-1, 7]
9: [-1, 10]
1: [-1, -1]
7: [-1, -1]
10: [-1, -1]

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM