创建二叉树,并遍历

上午突然想研究一下二叉树数据结构,就想写个程序创建二叉树,后面遇到了麻烦,怎么都调试不出来,还是上网才知道了问题的原因,文字的东西不会遗忘,所以把它记下来。


先定义二叉树的节点,不习惯用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地址不同。

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值