上午突然想研究一下二叉树数据结构,就想写个程序创建二叉树,后面遇到了麻烦,怎么都调试不出来,还是上网才知道了问题的原因,文字的东西不会遗忘,所以把它记下来。
先定义二叉树的节点,不习惯用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编程语言实现二叉树的中序遍历。 首先,我们先构建...
### 二叉树遍历及其应用 #### 一、引言 在计算机科学领域,《数据结构》是一门极为重要的基础课程。它不仅涵盖了各种数据结构的设计与实现,还涉及到了算法的设计与分析。其中,二叉树作为一种常用的数据结构,在...
### 二叉树遍历实验报告知识点概览 #### 一、实验背景及目标 **实验背景:** 本次实验属于《数据结构》课程的一部分,旨在通过实际编程加深学生对二叉树这一数据结构的理解和应用能力。二叉树作为一种基本且重要的...