【问题标题】:Replace NULL with -1 in all nodes of a binary search tree在二叉搜索树的所有节点中将 NULL 替换为 -1
【发布时间】:2020-07-16 13:36:21
【问题描述】:

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

【问题讨论】:

  • 显示您现在拥有的内容,我们可能会告诉您在哪里进行更改。
  • 没有一个“snippit”。您测试NULL 的每个地方都需要测试-1 的信号值。似乎没有太多好处,只适用于包含整数的节点。
  • 正如@crashmstr 所说,分配一个指向值为-1 的虚拟节点的指针,并在任何地方使用它,否则您将设置一个指向nullptr 的向下指针。不要忘记你的构造函数和析构函数!

标签: c++ algorithm data-structures binary-tree binary-search-tree


【解决方案1】:

解决方案是将 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;
        }
    }
}

输出(节点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]

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-04-03
    • 1970-01-01
    相关资源
    最近更新 更多