バイナリツリーとその再帰トラバーサル

バイナリツリートラバーサル

  1. バイナリツリーのアプリケーションは、それは多くの場合、特定の機能または処理を施し一つツリー一方のノードとツリー内のノードを見つけるために必要とされる、このプレゼント二分木をトラバースする方法の問題。
  2. 私たちは、パスサーチ部によると、ツリー内の各ノードを訪問したい、と各ノードがあり、一度だけアクセスされていること「アクセス」は多くのことを意味し、そのような出力ノード情報等の各種処理のためのノードであってもよいです。構造の線形トラバーサルは、問題を解決することは容易であり、バイナリツリーは、非線形構造であるため、バイナリツリーは、そうではないため、各ノードは0-2サブツリー、したがって、法律の必要性を有していてもよく、そうノードがトラバースを容易にするために、ライン・キュー上の二分木に配置することができます。
  3. 私たちはここに横断する必要がある場合は最初の左と右、その後、すなわち周りの根、左と右の根、根のみ3例は、周りに、我々は先行順、前順、後順と呼ばれています。
  4. 画像が示す2次の2つの例、その結果をの横断後、シーケンスにおいて、最初の順序で与えられます。

  5. ここで行きがけ、inorderを、後順再帰的な方法私は、一例として、シーケンス内の動きを達成するために行くために使用され、コアコードがのルートである左右イデオロギー:()
void inOrder(BiTree& T)
{
	if(T)
	{
		inOrder(T->lchild);
		visit(T->data);
		inOrder(T->rchild);
	}
}
  1. ここでは、完全なバイナリツリートラバーサルの実装コードは次のようになります。
#include <iostream>
#include <cstdio>
#include <cstdlib>

using namespace std;

//二叉链表的结点结构 
typedef struct BiTreeNode{
	char data; 					//数据域 
	struct BiTreeNode* lchild;  //左孩子指针域 
	struct BiTreeNode* rchild;  //右孩子指针域 
}BiNode,*BiTree;

void CreateBiTree(BiTree& T);	//初始化添加二叉树信息 
void preOrder(BiTree& T);  		//先序遍历二叉树:根 左 右 
void inOrder(BiTree& T);  		//中序遍历二叉树:左 根 右 
void postOrder(BiTree& T);  	//后序遍历二叉树:左 右 根 

void CreateBiTree(BiTree& T)
{
	char ch;
	cin>>ch;
	if(ch=='#')	T=NULL;
	else
	{
		if(!(T=(BiNode*)malloc(sizeof(BiNode))))  exit(0);
		T->data=ch;
		//这里注意正确输入的顺序 
		CreateBiTree(T->lchild); //先构造左子树 
		CreateBiTree(T->rchild); //再构造右子树 
	}
}

int visit(char data1)
{
	cout<<data1;
	return 0;
}

void preOrder(BiTree& T)
{
	if(T)
	{
		visit(T->data);
		preOrder(T->lchild);
		preOrder(T->rchild);
	}
}

void inOrder(BiTree& T)
{
	if(T)
	{
		inOrder(T->lchild);
		visit(T->data);
		inOrder(T->rchild);
	}
}

void postOrder(BiTree& T)
{
	if(T)
	{
		postOrder(T->lchild);
		postOrder(T->rchild);
		visit(T->data);
	}
}

int main()
{
	//测试用例:
	//ABE##F##C#DG###
	//-+a##*b##-c##d##/e##f##
	BiTree T;
	CreateBiTree(T);
	preOrder(T);
	cout<<endl;
	inOrder(T);
	cout<<endl;
	postOrder(T);
	return 0;
} 

結果は以下の通りであります:

公開された77元の記事 ウォン称賛19 ビュー10000 +

おすすめ

転載: blog.csdn.net/qq_42932834/article/details/93784340