上午突然想研究一下二叉树数据结构,就想写个程序创建二叉树,后面遇到了麻烦,怎么都调试不出来,还是上网才知道了问题的原因,文字的东西不会遗忘,所以把它记下来。
先定义二叉树的节点,不习惯用struct,结点用class表示。
Node.h文件代码如下:
#ifndef NODE_H
#define NODE_H
class Node
{
public:
int data;
Node *left;
Node *right;
};
#endif
关键是Node.cpp, 这里我用两种方法, 代码如下:
#include <iostream>
#include "Node.h"
using namespace std;
void CreateBiTree(Node *&root);
//*&root参数很关键,表示引用root指针地址的值, 没有&,就表示指针地址的复制
Node* CreateBiTree();
void PreOrderTraverse(Node *root);
int main()
{
Node *rootNode = NULL;
rootNode = CreateBiTree();
//或者用直接调用CreateBiTree(rootNode);
PreOrderTraverse(rootNode);
return 0;
}
void CreateBiTree(Node *&root)
{
int value;
cin >> value;
if (value == -1) {
root = NULL;
}
else {
root = new Node();
root->data = value;
CreateBiTree(root->left);
CreateBiTree(root->right);
}
}
Node* CreateBiTree()
{
Node *tree = new Node();
int nodeValue;
cin >> nodeValue;
if (nodeValue == -1)
tree = NULL;
else
{
tree->data = nodeValue;
tree->left = CreateBiTree();
tree->right = CreateBiTree();
}
return tree;
}
void PreOrderTraverse(Node *root)
{
if (root) {
cout << root->data << " ";
PreOrderTraverse(root->left);
PreOrderTraverse(root->right);
}
}
这样就大功告成了,CreateBiTree(Node *&root) 参数很重要,否则main函数中的root的地址和CreatBiTree函数中的root地址不同。
分享到:
相关推荐
先序创建二叉树并遍历计算节点数 先序创建二叉树并遍历计算节点数
二叉树的遍历以及创建.zip二叉树的遍历以及创建.zip二叉树的遍历以及创建.zip二叉树的遍历以及创建.zip二叉树的遍历以及创建.zip二叉树的遍历以及创建.zip二叉树的遍历以及创建.zip二叉树的遍历以及创建.zip二叉树的...
本报告基于二叉树的遍历方法,旨在通过递归和非递归两种方法创建一棵二叉树,并对其进行先序遍历、中序遍历、后序遍历及层次遍历,并求出该二叉树的深度和叶子结点数。同时,报告还实现了查找功能,能够输入一个结点...
1. 二叉树遍历的概念与目的: 遍历二叉树是为了访问树中的所有节点,按照特定的顺序执行操作,如查找、插入或删除节点。在二叉树的应用中,遍历常用于解决问题,如查找特定属性的节点,或者对所有节点进行统一处理。...
5. **计算所有节点的和**:在二叉树中计算所有节点的和,可以通过遍历树并累加每个节点的值来实现。以下是一个简单的例子: ```cpp int sumAllNodes(BSTNode* root) { if (root == nullptr) return 0; return ...
在建立二叉树时,需要通过插入操作逐步构建节点之间的关系,通常可以从根节点开始,根据数据的特性决定插入的位置。 中序遍历可以通过递归和非递归两种方式实现。递归算法的基本思想是:对于任意节点,首先递归遍历...
用C++写的二叉树先序遍历、中序遍历和后序遍历非递归算法
本实验要求使用先序递归遍历法建立二叉树,并输出其先序、中序、后序以及层次遍历结果。下面详细介绍这些遍历方法: 1. **先序遍历**:首先访问根节点,然后递归地先序遍历左子树,最后递归地先序遍历右子树。 2. *...
/* 设栈元素为二叉树的指针类型 */ typedef struct { QElemType *base; int front; /* 头指针,若队列不空,指向队列头元素 */ int rear; /* 尾指针,若队列不空,指向队列尾元素的下一个位置 */ } SqQueue; ...
本文还对二叉树的基本操作进行了介绍,包括创建二叉树、遍历二叉树、查找二叉树等。同时,文中还提供了一些基本的程序,让读者更好地理解二叉树的实现过程。 本文旨在帮助读者深入了解二叉树的结构和应用,提高读者...
C语言数据结构课程设计实例二叉树建立遍历冒泡排序快速排序等 C语言数据结构课程设计实例二叉树建立遍历冒泡排序快速排序等 C语言数据结构课程设计实例二叉树建立遍历冒泡排序快速排序等 C语言数据结构课程设计实例...
按先序遍历的扩展序列建立二叉树的二叉链表存储结构,实现二叉树先序、中序、后序遍历的递归算法,实现二叉树中序遍历的非递归算法,实现二叉树层次遍历的非递归算法(要求使用顺序队列,调用顺序队列基本操作...
10个数据结构课程设计实例二叉树建立遍历冒泡排序快速排序等10个数据结构课程设计实例二叉树建立遍历冒泡排序快速排序等10个数据结构课程设计实例二叉树建立遍历冒泡排序快速排序等 10个数据结构课程设计实例二叉树...
用户可以输入二叉树的结点,并选择遍历的方式,程序将输出遍历结果和叶子结点的个数。 五、结论 本文详细讲解了二叉树的遍历的实现,包括二叉树的存储、先序遍历、中序遍历、后序遍历和叶子结点的统计。该程序可以...
基于c语言10个数据结构课程设计实例二叉树建立遍历冒泡排序快速排序等 基于c语言10个数据结构课程设计实例二叉树建立遍历冒泡排序快速排序等 基于c语言10个数据结构课程设计实例二叉树建立遍历冒泡排序快速排序等 ...
### 三、二叉树遍历 #### 3.1 先序遍历 - **定义**:先访问根节点,然后先序遍历左子树,最后先序遍历右子树。 - **代码实现**: ```c void preorder(struct BiTNode *t) { if (t) { printf("%d", t->data); // ...
这种遍历方式常用于复制二叉树或者创建二叉树的镜像。 2. 中序遍历(左-根-右):首先递归地访问左子树,然后访问根节点,最后访问右子树。在二叉搜索树中,中序遍历可以得到有序序列。 3. 后序遍历(左-右-根):...
二叉树建立遍历冒泡排序快速排序算法:C语言编程实现10个数据结构课程设计实例.zip 二叉树建立遍历冒泡排序快速排序算法:C语言编程实现10个数据结构课程设计实例.zip 二叉树建立遍历冒泡排序快速排序算法:C语言...
中序遍历是二叉树遍历的一种方法,它按照“左-根-右”的顺序访问树中的所有节点,对于理解树的性质和执行某些操作非常有用。本课程设计将详细介绍如何使用Java编程语言实现二叉树的中序遍历。 首先,我们先构建...