`
zgcypjhf
  • 浏览: 5305 次
  • 性别: Icon_minigender_1
  • 来自: 南京
社区版块
存档分类
最新评论

创建二叉树,并遍历

    博客分类:
  • C++
阅读更多

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


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

 

 

1
0
分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics