(C++)分別用遞歸和非遞歸方式實現二叉樹先序、中序和後序遍歷

實現二叉樹先序、中序和後序遍歷

【說明】

本文是左程雲老師所著的《程序員面試代碼指南》第三章中“分別用遞歸和非遞歸方式實現二叉樹先序、中序和後序遍歷”這一題目的C++復現。
本文只包含問題描述、C++代碼的實現以及簡單的思路,不包含解析說明,具體的問題解析請參考原書。

【題目】

用遞歸和非遞歸的方式,分別按照二叉樹先序、中序和後序打印所有的節點。我們約定:先序遍歷順序爲根、左、右;中序遍歷順序爲左、根、右;後序遍歷順序爲左、右、根。

  • 頭文件:
    binarytree.h
  • 源文件:
    binarytree.cpp
    源.cpp

binarytree.h

#pragma once
#ifndef _BINARYTREE
#define _BINARYTREE
#include <iostream>
using namespace std;
class Node
{
public :
	Node(int data)
	{
		value = data;
		left = NULL;
		right = NULL;
	}
public:
	int value;
	Node *left;
	Node *right;
};
//遞歸版
void preOrderRecur(Node *head);
void inOrderRecur(Node *head);
void posOrderRecur(Node *head);

#endif // !_BINARYTREE

binarytree.cpp

#include <iostream>
#include "binarytree.h"
void preOrderRecur(Node *head)
{
	if (head == NULL)
		return;
	cout << head->value << endl;
	preOrderRecur(head->left);
	preOrderRecur(head->right);
}
void inOrderRecur(Node *head)
{
	if (head == NULL)
		return;
	inOrderRecur(head->left);
	cout << head->value << endl;
	inOrderRecur(head->right);
}
void posOrderRecur(Node *head)
{
	if (head == NULL)
		return;
	posOrderRecur(head->left);
	posOrderRecur(head->right);
	cout << head->value << endl;
}

源.cpp

#include <iostream>
#include "binarytree.h"
using namespace std;
//數組方式建立二叉樹
void createBT(Node **head, int arr[], int len, int index = 0)
{
	if (index > len - 1)
		return;
	(*head) = new Node(arr[index]);
	createBT(&((*head)->left), arr, len, 2 * index + 1);
	createBT(&((*head)->right), arr, len, 2 * index + 2);
}
int main()
{
	int arr[] = { 1,2,3,4,5,6,7};
	Node *head = NULL;
	createBT(&head, arr, 7);
	cout << "Using recursive method to achieve pre-order traversal:" << endl;
	preOrderRecur(head);
	cout << endl;
	cout << "Using recursive method to achieve in-order traversal:" << endl;
	inOrderRecur(head);
	cout << endl;
	cout << "Using recursive method to achieve pos-order traversal:" << endl;
	posOrderRecur(head);
	cout << endl;
	//cout << "hello 124" << endl;
	system("pause");
	return 0;
}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章