1. 程式人生 > >C++類實現二叉樹的構建和遍歷

C++類實現二叉樹的構建和遍歷

#include<iostream>
#include<fstream> 
#include<string.h> 
using namespace std;

/*二叉樹的結構體*/
typedef struct BTree
{
	int val;
	struct BTree *left,*right;	
}BTree;

/*二叉樹的類,包含著操作二叉樹的各種方法*/ 
class Tree
{
	public:
	BTree *create_node(int level,string pos);
	void PreOrder(BTree *t);  //先序遍歷 
	void InOrder(BTree *t);  //中序遍歷 
	void PostOrder(BTree *t);  //後序遍歷 
	
	BTree *root;	
};

/*用先序遍歷的方法遞迴構造一課二叉樹*/ 
BTree* Tree::create_node(int level,string pos)
{
	int data;
	BTree *node = new BTree;
	
	cout<<"please enter data:level "<<level<<" "<<pos<<endl;
	cin>>data;

	//若輸入的資料為0,則把該結點的子結點置為空 
	if(data == 0)
	{
		return NULL;
	}

	node->val= data;

	/*create_node()的	引數用於在給二叉樹賦值時表明
	現在賦值的是哪個結點*/ 
	node->left = create_node(level+1,"left");
	node->right= create_node(level+1,"right");			
	return node;
}

void Tree::PreOrder(BTree *t)
{
	if(t)
	{
		cout<<t->val<<endl;;
		PreOrder(t->left);
		PreOrder(t->right);				
	}
} 

void Tree::InOrder(BTree *t)
{
	if(t)
	{
		InOrder(t->left);
		cout<<t->val<<endl;;
		InOrder(t->right);
	}
}

void Tree::PostOrder(BTree *t)
{
	if(t)
	{
		PostOrder(t->left);
		PostOrder(t->right);
		cout<<t->val<<endl;	
	}
}

int main()
{
	Tree tree;
	tree.root = tree.create_node(1,"root");
	cout<<"Pre"<<endl;
	tree.PreOrder(tree.root);
	
	cout<<"In"<<endl;
	tree.InOrder(tree.root);
	
	cout<<"Post"<<endl;
	tree.PreOrder(tree.root);	
	
	return 0;
}

相關推薦

C語言實現的各種及求解深度

#include<stdio.h> #include<malloc.h> #define MAXSIZE 100 typedef char dataType; //二叉樹結構 typedef struct bnode{ dataType data; struct bnode *lC

Java 實現插入

定義節點類 package com.drj.tree; /** * * @ClassName: TreeNode * @Description:TODO(代表樹節點) * @author: drj * @date: 2018年8月22日

C++實現構建

#include<iostream> #include<fstream> #include<string.h> using namespace std; /*

【資料結構週週練】012 利用佇列非遞迴演算法實現的層次

一、前言 二叉樹的遍歷是比較多樣化的遍歷,有很多種遍歷方式,先序遍歷,中序遍歷,後序遍歷,層次遍歷等等。本次給大家講的是層次遍歷,為了方便,我將題目中的資料改為編號,從左往右,從上往下依次遍歷。方便大家看到結果。 二、題目 將下圖用二叉樹存入,並通過層次遍歷方式,自上而下,從左往右對

利用鏈式佇列實現的層次C語言)

規則: 判斷樹是否為空,為空則返回; 若不空,從樹的第一層。也就是根節點開始訪問。 從上而下逐層遍歷, 在同一層中,按從左到右的順序對節點逐個訪問。 #include<stdio.h> #include<stdlib.h> t

建立

mil inorder 推斷 microsoft con 是否 font pac node 二叉樹創建遍歷規則: 1.先序:根-左-右 2.中序:左-根-右 3.後序:左-右-根 二叉樹定義和輔助函數例如以下: struct node {

資料結構——鏈佇列實現的層次

在二叉樹的遍歷這篇部落格中https://www.cnblogs.com/wkfvawl/p/9901462.html 對於二叉樹的層次遍歷我只是給出了基於C++ STL的程式碼,這裡我使用資料結構的連結串列,構建一個鏈佇列來實現。這也算是我第一次使用鏈佇列來完成某個任務,鏈佇列程式碼還是來自課本,因為之前

Java實現三種演算法

</pre><p></p><p>參考網上一些資料測試整理了一下二叉樹遍歷的Java實現程式碼。</p>二叉樹三種遍歷方式:先序遍歷、中序遍歷、後序遍歷。<p>首先定義二叉樹類:</p>&l

Binary Tree Postorder Traversal 非遞迴實現後序

Given a binary tree, return the postorder traversal of its nodes' values. For example: Given binary tree {1,#,2,3}, 1 \ 2 / 3 return 

Python實現"的層次||"的一種方法

給定一棵二叉樹,返回從上到下按層級順序遍歷結點的值(例如,從葉子節點的層級到根結點的層級) 例如: 二叉樹[3,9,20,null,null,15,7], 3 / \ 9 20 / \ 15 7 返回它從下到上按層級順序遍歷的

非遞迴,不用棧實現中序

  最近總有人問這個問題:“如何不用棧,也不用遞迴來實現二叉樹的中序遍歷”。這個問題的實現就是迭代器問題,無論是Java還是C++,利用迭代器遍歷樹節點(Java中是TreeMap類,C++中是map類)都使用了中序遍歷,且無法使用遞迴和棧,演算法效率近似為O(1),不可能

遞迴建立及深度計算

上篇咱們說到二叉樹的一種建立方法及三種遍歷方法的遞迴非遞迴演算法。這篇換了一種新的建立方法,用先根遍歷遞迴的思路建立二叉樹,用遞迴的方法計算深度,用中根遞迴和非遞迴方法遍歷整個二叉樹。 BinaryTree.h //二叉樹的建立和遍歷 #ifndef BINARYTREE_

Python實現的層次及按層輸出的兩種方法

二叉樹的層次遍歷 二叉樹的層次遍歷即從上往下、從左至右依次列印樹的節點。 其思路就是將二叉樹的節點加入佇列,出隊的同時將其非空左右孩子依次入隊,出隊到佇列為空即完成遍歷。 # -*- coding:utf-8 -*- # class TreeNode: #

java 實現深度優先的 前、中、後序(遞迴)

import java.util.*; public class BinaryTree { protected Node root; public BinaryTree(Node root) { this.

佇列實現層序

//基本資料結構 template<class T> struct BinaryTreeNode { T _data; BinaryTreeNode<T>* _left;

JAVA語言實現的層次的非遞迴演算法及遞迴演算法

/** 二叉樹節點 */ public class BTNode {   private char key;   private BTNode left, right;   public BTNode(char key) {     this(key, null, null

中序(遞迴非遞迴)演算法及C語言實現

二叉樹中序遍歷的實現思想是: 訪問當前節點的左子樹; 訪問根節點; 訪問當前節點的右子樹; 圖 1 二叉樹   以圖  1 為例,採用中序遍歷的思想遍歷該二叉樹的過程為: 訪問該二叉樹的根節點,找到 1; 遍歷節點 1 的左子樹,找到節點 2; 遍歷節點 2 的左子樹,找到節點 4;

C語言實現的插入刪除

二叉樹的插入刪除://首先介紹二叉樹的插入:     //首先需要明白插入的規則:每個建好的結點p都需要從跟結點開始與根結點相比較資料域,如果根結點的資料域小於結點p,則接著將結點p與根結點的右子樹相比較,否則p將與根結點的左子樹相比較;     //繼續往下類推,一直到最後

c語言實現建立程式(附帶註釋)

/******************************************************************/ //樹的遞迴思想,把每個節點當作是一棵樹,以後序遍歷為例 //步驟1:訪問左子樹.2訪問右子樹3.列印當前節點的值 //在節點遍歷時如果

使用C++陣列實現的儲存基本操作

1、建立檔案ArrayTree.h 定義二叉樹的資料結構 #ifndef ARRAYTREE_H #define ARRAYTREE_H class ArrayTree{ public: Ar