• 树和二叉树 | 一些遇到的小问题


    1.

    TreeNode &a

    TreeNode &a是一个引用,指向类型为T的TreeNode节点。这个引用可以用来修改或访问该节点的值或属性。

    2.

    *BiTree是什么意思: 

    1. typedef struct BiTNode
    2. { char data;
    3. struct BiTNode* lchild, * rchild;
    4. }BiTNode, * BiTree; 

    BiTree是一种二叉树的数据结构,其中每个节点最多有两个子节点,分别称为左子节点和右子节点。在C语言中,可以使用结构体来定义二叉树节点,其中BiTNode表示节点类型,BiTree表示指向节点的指针类型 

    3.

    f53f911a66594a008cf731bf63691dfc.jpg

    二叉树左孩子——右孩子指的是地址而不是字母数据!指针指地址啊!

    4.

    解释代码中的T():if(pos>=size||L[pos]==T())

    在这段代码中,T()表示类型T的默认值。当L[pos]等于T()时,说明当前位置没有被占用,可以插入新的元素。

    首先,代码中的`T()`表示`T`类型的默认构造函数,用来判断顺序存储中的元素是否为空。如果当前位置`pos`超出了数组`L`的大小或者数组`L`中的元素为空(即默认构造函数生成的元素),则返回`NULL`。

    5.

    queue<const TreeNode*> Q:为什么要加const TreeNode*,const TreeNode*是什么,为什么不能直接写queue Q

    在这个代码中,`queue*> Q` 中的 `const TreeNode*` 表示存储在队列中的元素是一个指向 `TreeNode` 类型对象的常量指针。这里使用 `const` 关键字的目的是为了确保在队列中的指针指向的对象不会被修改

    `const TreeNode*` 是一个常量指针,它指向的对象在指针被声明后不可被修改。这是因为队列是一种数据结构,它的目的是按照先进先出的顺序存储和访问元素。如果队列中的元素可以被修改,可能会导致数据结构的不一致性

    因此,为了确保队列中的元素不会被修改,我们使用了常量指针。这样一来,即使在使用队列时,我们无法直接修改指针指向的对象,而只能通过指针来访问对象的值。

    如果直接写 `queue Q`,那么队列中的元素就不会是常量指针,可以修改指针指向的对象,这可能不是我们所期望的。所以在这种情况下,我们需要明确指定队列中元素的类型为 `const TreeNode*`。

    6.

    请用例子说明这行代码的作用:TreeNode *t=MakeLinked(L,L.size(),0);

    这行代码的作用是将顺序存储的二叉树转化为链式存储,并将转化后的二叉树的根节点赋值给指针 t。

    假设有一个顺序存储的二叉树,存储在名为 L 的向量中。L.size() 返回向量 L 的大小。0 表示从根节点开始转化。

    通过调用 MakeLinked 函数,并传入向量 L、向量的大小以及根节点的位置,函数会递归地将顺序存储的二叉树转化为链式存储,并返回根节点的指针。

    最后,将返回的根节点指针赋值给指针 t,这样 t 就指向转化后的链式存储的二叉树的根节点。

    7.

    二叉树的顺序存储结构转换为链式存储结构非递归算法

    这几行代码的作用:    i++;
            while(i         {
                i++;
            }

    这几行代码的作用是在跳过顺序存储数组中的空元素,找到下一个非空元素的位置。

    首先,代码中的变量 i 表示当前位置, i++ 将 i 增加 1,即将位置移动到下一个位置。

    在循环中,首先检查 i 是否小于 n(数组 L 的大小),同时检查 L[i] 是否等于 T() 的返回值(即判断元素是否为空)。如果满足这两个条件,则表示当前位置 i 是一个空元素,需要继续向后查找。

    循环内部的语句 i++ 将 i 增加 1,即将位置移动到下一个位置。然后继续进行下一次循环,直到找到下一个非空元素的位置或者超出数组范围

    1. template<class T>
    2. TreeNode *MakeLinked(const vector& L)
    3. {
    4. if(L.size()==0)
    5. return;
    6. Queue*> Q;
    7. TreeNode *t=GetBTNode(L[0])
    8. TreeNode *parent,*child;
    9. Q.push(t);
    10. int i=0;n=L.size();
    11. while(!Q.empty())
    12. {
    13. if(2*i+12*i+1]!=T())
    14. {
    15. child=GetBTNode(L[2*i+1]);
    16. parent->left=child;
    17. Q.push(child);
    18. }
    19. if(2*i+22*i+2]!=T())
    20. {
    21. child=GetBTNode(L[2*i+2]);
    22. parent->right=child;
    23. Q.push(child);
    24. }
    25. i++;
    26. while(iT())
    27. {
    28. i++;
    29. }
    30. }
    31. return t;
    32. }

     

  • 相关阅读:
    OpenLayers实战,WebGL图层根据Feature要素的变量动态渲染多种颜色、不同长度和不同透明度的长方形(矩形)图形,适用于大量矩形图形渲染
    通过公式和源码解析 DETR 中的损失函数 & 匈牙利算法(二分图匹配)
    合理的康复训练
    centos设置固定ip
    webpack 解决:TypeError: merge is not a function 的问题
    【houdini】网格采样粒子
    MongoDB学习总览
    重量(计量单位)英文缩写和转换表
    openharmony容器组件之Grid
    springboot小区疫苗接种管理系统设计与实现毕业设计源码021530
  • 原文地址:https://blog.csdn.net/kazuma_hn/article/details/133801403