C++实现二叉树的建立和三种递归遍历

说明:本文仅供学习交流,转载请标明出处,欢迎转载!

二叉树是一种常见的数据结构,二叉树的遍历也是家常便饭的事了,这里仅仅写出一个完整的可以运行的C++代码来随便建立一个如下图所示的二叉树,建一棵二叉树是实现二叉树各种操作的基础,下面的程序也很简单,这只是二叉树练习的开始,以后的博文中,将会紧紧围绕这棵二叉树练习更多的操作:如求二叉树的大小,二叉树的深度,翻转二叉树...,这里只是基础中的基础,只是为以后的学习做铺垫。

下面给出C++代码,代码的功能包括:

1.建立如上图所示的简单的二叉树。

2.给出三种常见的二叉树的变量方式,拿来练练手吧。

下面的代码是可以直接运行的代码:

#include<iostream>
using namespace std;
struct Node
{
	int data;
	Node *left;
	Node *right;
	Node(int data)
	{
		this->data=data;
		this->left=NULL;
		this->right=NULL;
	}
};
class BinTree
{
public:
	Node *root;
	Node* CreateTree();
	void preOrder(Node *r);//递归实现先序遍历
	void InOrder(Node *r);//递归实现中序遍历
	void PostOrder(Node *r);//递归实现后续遍历
};

Node* BinTree::CreateTree()//创建一棵二叉树
{
	Node *p1=new Node(1);
	Node *p2=new Node(2);
	Node *p3=new Node(3);
	Node *p4=new Node(4);
	Node *p5=new Node(5);
	Node *p6=new Node(6);
	Node *p7=new Node(7);
	Node *p8=new Node(8);
	Node *p9=new Node(9);
	p1->left=p2;
	p1->right=p3;
	p2->left=p4;
	p2->right=p5;
	p5->left=p6;
	p3->left=p7;
	p3->right=p8;
	p8->right=p9;
	root=p1;
	return p1;
}

void BinTree::preOrder(Node *r)//递归实现先序遍历
{
	if(r==NULL)
	{
		return ;
	}
	else
	{
		cout<<r->data<<" ";
		preOrder(r->left);
		preOrder(r->right);
	}
}

void BinTree::InOrder(Node *r)//递归实现中序遍历
{
	if(r==NULL)
	{
		return ;
	}
	else
	{
		InOrder(r->left);
		cout<<r->data<<" ";
		InOrder(r->right);
	}
}

void BinTree::PostOrder(Node *r)//递归实现后序遍历
{
	if(r==NULL)
	{
		return ;
	}
	else
	{
		PostOrder(r->left);
		PostOrder(r->right);
		cout<<r->data<<" ";
	}
}

int main()
{
	BinTree t;
	t.CreateTree();//创建二叉树
	cout<<"先序遍历:";
	t.preOrder(t.root);//先序遍历
	cout<<endl;

	cout<<"中序遍历:";
	t.InOrder(t.root);//中序遍历
	cout<<endl;

	cout<<"后序遍历:";
	t.PostOrder(t.root);//后序遍历
	cout<<endl;
	return 0;
}

   运行结果如下:

C++实现二叉树的建立和三种递归遍历

时间: 2024-10-07 22:30:40

C++实现二叉树的建立和三种递归遍历的相关文章

二叉树的创建与三种递归遍历

#include<iostream>struct tree{ struct tree *left; struct tree *right; int data;};tree *T;typedef struct tree *Tree,*TNode,TREE;using namespace std;void PreCreateTree(Tree& T);void PreOrder(Tree& T);void InOrder(Tree& T);void PostOrder(Tr

Java学习(十八):二叉树的三种递归遍历

二叉树的三种递归遍历: 1 public class StudentNode 2 { 3 private String name; 4 5 private StudentNode leftNode; 6 7 private StudentNode rightNode; 8 9 public String getName() 10 { 11 return name; 12 } 13 14 public void setName(String name) 15 { 16 this.name = na

二叉树的建立、三种(递归、非递归)遍历方法

二叉树定义: 1.有且仅有一个特定的称之为根root的结点 2.当n>1时,除根结点之外的其余结点分为两个互不相交的子集.他们称为二叉树的左子树和右子树. 二叉树的一种建立方法: 若对有n个结点的完全二叉树进行顺序编号(1<=i<=n),那么,对于编号为i(i>=1)的结点. 当i=1时,该结点为根,它无双亲结点; 当i>1时,该节点的双亲编号为[i/2]; 若2i<=n,该结点为编号为2i的左孩子,否则没有左孩子 当2i+1<=n,该结点有编号为2i+1的右孩子

二叉树的三种递归遍历实现

声明:学过二叉树的童鞋可以跳过前面的故事,直接看最后的代码实现.  你见过二叉树吗?一种很神奇的树,传说见到他的人都是幸运的.如果你没见过,好运立马降临: 怎么样?有被惊艳到吗?好运已经送到,祝你今晚睡得香甜. 好了,送完祝福,下面讲一个神奇的故事: 讲故事前,简单说说二叉树. 那么我要说的二叉树是什么呢?它是一种数据结构,数据结构是什么可以自行百度一下,这里不讨论他.举一个现实中的例子:把某个家庭看作一棵树,这家的爸爸(妈妈)有两个孩子,那么爸爸(妈妈)就是树的根,俩孩子就是这棵树的叶子,而此

二叉树的建立和三种遍历

1 #include <stdio.h> 2 #include <stdlib.h> 3 #include <assert.h> 4 #include <string.h> 5 typedef struct tree{ 6 int data; 7 struct tree *pLeft; 8 struct tree *pRight; 9 }*pT,T; 10 pT CreateTree(){ 11 int data=0; 12 pT p=NULL; 13 pu

数据结构 二叉树的建立及三种遍历方法

#include<iostream> #include<cstdio> #include<cstring> #include<cstdlib> using namespace std; typedef struct Binode{ char data; struct Binode *lchild,*rchild; }Binode,*Bitree; void CreatTREE(Bitree &T) { char ch; scanf("%c&

二叉树的创建,和三种递归遍历方式

在运行窗口输入: A B D # # F E # # # C G # H # # I # # 1 #include <stdio.h> 2 #include <stdlib.h> 3 4 typedef char ElementType; 5 typedef struct TNode *Position; 6 typedef Position BinTree; //二叉树类型 7 struct TNode { 8 ElementType Data; //结点数据 9 BinTree

三种递归遍历二叉树

1 #include <stdio.h> 2 #include <stdlib.h> 3 4 typedef int ElementType; 5 6 struct BinarySearchTreeNode 7 { 8 ElementType Element; 9 struct BinarySearchTreeNode *Left; 10 struct BinarySearchTreeNode *Right; 11 }; 12 13 int BinarySearchTreePreO

Python --- 二叉树的层序建立与三种遍历

二叉树(Binary Tree)时数据结构中一个非常重要的结构,其具有....(此处省略好多字)....等的优良特点. 之前在刷LeetCode的时候把有关树的题目全部跳过了,(ORZ:我这种连数据结构都不会的人刷j8Leetcode啊!!!) 所以 !!!敲黑板了!!!今天我就在B站看了数据结构中关于树的内容后,又用我浅薄的Python大法来实现一些树的建立和遍历. 关于树的建立我觉得层序建立对于使用者来说最为直观,输入很好写.(好吧,我是看LeetCode中的树输入都是采用层序输入觉得非常好