数据结构 二叉树-二叉树 节点类型为结构类型 如何初始化和赋值?

问题描述

二叉树 节点类型为结构类型 如何初始化和赋值?

struct ItemNode
{
int id;
string name;
};

typedef struct BNode
{
ItemNode node;
BNode *lChild;
BNode *rChild;
}BNode;

解决方案

ItemNode i1, i2, i3;
i1.id = 1;
i1.name = "a";
i1.id = 2;
i1.name = "b";
i1.id = 3;
i1.name = "c";
BNode b1, b2, b3;
b1.node = i1;
b2.node = i2;
b3.node = i3;
b1.lChild = &b2;
b1.rChild = &b3;

解决方案二:

我是想定义BNode *p = new BNode; 然后不知道怎么初始化以及判断是否为空,另外赋值的话需要重载=吗?

解决方案三:

不知道你在用c还是c++,在c++里struct和class是同义词,但是c里面是没有class的,也不能用new。(这里看到你用string,貌似你在用c++)
在c里面你应该这样申请空间

BNode *p = (BNode *)malloc(sizeof(BNode));
p->id = 1;
最后用完再free(p);

c++里你可以
BNode *p = new BNode;
另外赋值的话需要重载=吗,=调用的事copy constructor, 如果你的程序里面希望string相互不影响,你需要重载copy constructor
还有,你的name最好定义成string&

时间: 2024-10-29 08:31:13

数据结构 二叉树-二叉树 节点类型为结构类型 如何初始化和赋值?的相关文章

《精通SNMP》——2.4 标签类型和子类型

2.4 标签类型和子类型 除前面介绍的简单类型和结构类型外,还存在标签类型和子类型,它们是ASN.1从不同应用角度定义的两种类型. 2.4.1 标签类型 一般地,用户在定义类型时,除了名字外,Tag.传输编码都继承基础类型原有的定义.标签类型(Tagged Type )是这样一种类型:用户在利用已有的类型定义新类型时,也为新类型定义了新的Tag. 例如下面的类型定义语句: Age ::= INTEGER 其中,类型Age也是整型类型,Tag.传输编码都不改变.再看下面的类型定义语句: IpAdd

数据结构的C++实现之二叉树的遍历和存储结构

在<二叉树的定义和性质>中我们已经认识了二叉树这种数据结构.我们知道链表的每个节点可以有一个后继,而二叉 树(Binary Tree)的每个节点可以有两个后继.比如这样定义二叉树的节点: typedef struct node *link; struct node { unsigned char item; link l, r; }; 这样的节点可以组织成 下图所示的形态. 二叉树可以这样递归地定义: 1. 就像链表有头指针一样,每个二叉树都有一个根指针(上图中的root指针)指向它 .根指针

数据结构之---二叉树C实现

学过数据结构的都知道树,那么什么是树? 树(tree)是包含n(n>0)个结点的有穷集,其中: (1)每个元素称为结点(node): (2)有一个特定的结点被称为根结点或树根(root). (3)除根结点之外的其余数据元素被分为m(m≥0)个互不相交的集合T1,T2,--Tm-1,其中每一个集合Ti(1<=i<=m)本身也是一棵树,被称作原树的子树(subtree). 树也可以这样定义:树是由根结点和若干颗子树构成的.树是由一个集合以及在该集合上定义的一种关系构成的.集合中的元素称为树的

java语言 二叉树(三叉链表存储结构)的深拷贝

问题描述 java语言 二叉树(三叉链表存储结构)的深拷贝 爆炸,这个非递归好复杂,规定不使用栈的非递归,递归都会,非递归就蒙了,有大神能挑战一下吗,急 解决方案 二叉树是一种特殊的数据结构,我们可以对它线性化,方法是,0表示根节点,1 2表示它的子节点,3 4 5 6表示1 2的子节点7 8 9 10 11 12 13 14是再下层-- 很明显,知道一个节点,它的子节点的索引值就是x2+1和x2+2,它的父节点就是-1再整除2. 有了这个知识点,就可以用数组来表示二叉树,也就不用递归和堆栈了.

二叉树 层序遍历-C++ 数据结构、二叉树、层序遍历问题

问题描述 C++ 数据结构.二叉树.层序遍历问题 代码结构如下: template class CirQueue... // 栈类: template struct BiNode{ // 节点类: T data; BiNode *lchild, * rchild; }; template class BiTree.... // 二叉树类: ? template void BiTree::leverOrder( ) { // 层序遍历: if( root == NULL ) { cout<<&q

数据结构有关二叉树问题

问题描述 数据结构有关二叉树问题 一颗完全二叉树有700个结点,则共有几个叶子结点. 答案是350个,求详细计算过程 解决方案 ?? #define null 0???#include "stdio.h" ???typedef char datatype;?? typedef struct tn? {datatype data;?? struct tn *lc,*rc;??......答案就在这里:数据结构-二叉树 问题---------------------- 解决方案二: n0=

数据结构之二叉树

一 树.二叉树和二叉查找树 1.树的概念: 递归定义: 1) 一个空结构是一个空树 2)如果t1,...,tk是分离的树,那么以t1,...,tk的根为子节点的根结构也是树 3)只有按照1,2规则产生的结构才是树 树的概念更多用于分层结构,比如数据库管理系统的分层模型. 2.二叉树(binary tree):所有节点都有两个子节点(可以为空),并且每个子节点都指明为左子节点还是右子节点 1)完全二叉数,满足第i层,有2的i-1次方个子节点此条件的二叉树 2)对于所有非空二叉树,如果它的中间子节点

数据结构关于二叉树遍历的一道题 在线等~

问题描述 数据结构关于二叉树遍历的一道题 在线等~ 利用栈的基本操作写出先序遍历二叉树的非递归算法 要求进栈的元素最少, 并指出下列二叉树中需进栈的元素. 这是答案: 根据上述代码, (1)左子树lchild不需要入栈吗? (2)入栈顺序是什么? (3)最后一行代码 if (top>0) bt=s[top--] 是什么意思? (4)如果是中序或后序,入栈顺序又是什么? 谢谢大神们啦~~ O(∩_∩)O 解决方案 3 if (top>0) bt=s[top--] 出栈.取出top位置的元素,并且

二叉树的节点数的问题

问题描述 二叉树的节点数的问题 给出一个完整二叉树,查找结点个数. 假设二叉树结点结构如下: struct TreeNode { int val; TreeNode *left; TreeNode *right; TreeNode(int x) : val(x), left(NULL), right(NULL) {} }; 请完成此函数: class Solution { public: int countNodes(TreeNode* root) { } } 请给出该函数的算法复杂度,如O(n