上午突然想研究一下二叉树数据结构,就想写个程序创建二叉树,后面遇到了麻烦,怎么都调试不出来,还是上网才知道了问题的原因,文字的东西不会遗忘,所以把它记下来。
先定义二叉树的节点,不习惯用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)以二叉链为存储结构,建立二叉树 (2)用递归算法和非递归算法实现二叉树的中序遍历 (3)二叉树中序遍历的演示
用C++写的二叉树先序遍历、中序遍历和后序遍历非递归算法
数据结构课程设计报告-二叉树的遍历.docx
/* 设栈元素为二叉树的指针类型 */ typedef struct { QElemType *base; int front; /* 头指针,若队列不空,指向队列头元素 */ int rear; /* 尾指针,若队列不空,指向队列尾元素的下一个位置 */ } SqQueue; ...
一、实验名称:二叉树的遍历方法 二、实验目的: (1)熟悉C语言的上机环境,进一步掌握C语言的结构特点...要求:从键盘输入先序序列,以二叉链表作为存储方式,建立二叉树实现遍历,采用递归和非递归的两种方法实现。
C语言数据结构课程设计实例二叉树建立遍历冒泡排序快速排序等 C语言数据结构课程设计实例二叉树建立遍历冒泡排序快速排序等 C语言数据结构课程设计实例二叉树建立遍历冒泡排序快速排序等 C语言数据结构课程设计实例...
按先序遍历的扩展序列建立二叉树的二叉链表存储结构,实现二叉树先序、中序、后序遍历的递归算法,实现二叉树中序遍历的非递归算法,实现二叉树层次遍历的非递归算法(要求使用顺序队列,调用顺序队列基本操作...
包括了二叉树的各种递归与非递归的遍历算法 还可对二叉树所有结点求和
基于c语言10个数据结构课程设计实例二叉树建立遍历冒泡排序快速排序等 基于c语言10个数据结构课程设计实例二叉树建立遍历冒泡排序快速排序等 基于c语言10个数据结构课程设计实例二叉树建立遍历冒泡排序快速排序等 ...
实验八:二叉树的遍历算法 以下是二叉树建立的两种方法,三种遍历和计算结点数的综合程序.(读者有建议可提出)
编写程序,用先序递归遍历法建立二叉树的二叉链表存储结构,然后输出其先序、中序、后序以及层次遍历结点访问次序。其中层次遍历的实现需使用循环队列。二叉树结点数据类型建议选用字符类型
不错的练手C语言课程设计例子--10个数据结构课程设计实例、二叉树建立遍历冒泡排序快速排序等 不错的练手C语言课程设计例子--10个数据结构课程设计实例、二叉树建立遍历冒泡排序快速排序等 不错的练手C语言课程设计...
数据结构课程设计--二叉树遍历及其应用、对树的先序遍历、后序遍历、中序遍历、层序遍历、二叉树的深度及其叶子树、并打印树形。
二叉树的递归算法:建立二叉树、遍历二叉树.doc 多多指教
查找算法,二叉排序树,二叉树层次遍历,二叉树非递归遍历,二叉树的建立,关键字匹配查找等。 如有问题,可随时私信。 初学C语言必须掌握的一些基础知识,包括直接选择排序、直接插入排序、冒泡排序、快速排序。 ...
二叉树的遍历,先序遍历,中序遍历,后续遍历。.
二叉树遍历算法,包括创建二叉树,先序,中序以及后序遍历等。
主要介绍了C语言排序方法,包含10种排序,数据结构课程设计实例二叉树建立遍历冒泡排序快速排序_二叉排序树_二叉树层次遍历_二叉树非递归遍历_二叉树建立括号匹配直接插入选择代码大学生本科毕业设计期末作业排序...