码迷,mamicode.com
首页 > 其他好文 > 详细

编程算法 - 中序遍历 递归/迭代 代码(C)

时间:2014-09-22 11:48:28      阅读:186      评论:0      收藏:0      [点我收藏+]

标签:mystra   编程算法   中序遍历   递归   迭代   

中序遍历 递归/迭代 代码(C)


本文地址: http://blog.csdn.net/caroline_wendy


中序遍历(InOrder)作为二叉搜索树的排序方式, 有着重要的作用.

递归和迭代的方法都需要掌握, 迭代主要使用了栈(stack)进行输入输出.


代码:

/*
 * main.cpp
 *
 *  Created on: 2014.9.18
 *      Author: Spike
 */

/*eclipse cdt, gcc 4.8.1*/

#include <iostream>
#include <list>
#include <queue>
#include <stack>
#include <string.h>
#include <stdlib.h>
#include <stdio.h>

using namespace std;

struct BinaryTreeNode {
	BinaryTreeNode(int _value) {
		value = _value;
		left = NULL;
		right = NULL;
	}

	int value;
	BinaryTreeNode* left;
	BinaryTreeNode* right;
};

void printTree (BinaryTreeNode* tree)
{
	BinaryTreeNode* node = tree;
	std::queue<BinaryTreeNode*> temp1;
	std::queue<BinaryTreeNode*> temp2;

	temp1.push(node);

	while (!temp1.empty())
	{
		node = temp1.front();
		if (node->left != NULL) {
			temp2.push(node->left);
		}

		if (node->right != NULL) {
			temp2.push(node->right);
		}

		temp1.pop();

		std::cout << node->value  << " ";

		if (temp1.empty())
		{
			std::cout << std::endl;
			temp1 = temp2;
			std::queue<BinaryTreeNode*> empty;
			std::swap(temp2, empty);
		}
	}
}

BinaryTreeNode* buildTree (void)
{
	BinaryTreeNode* root = new BinaryTreeNode(1);
	BinaryTreeNode* node2 = new BinaryTreeNode(2);
	BinaryTreeNode* node3 = new BinaryTreeNode(3);
	BinaryTreeNode* node4 = new BinaryTreeNode(4);
	BinaryTreeNode* node5 = new BinaryTreeNode(5);
	BinaryTreeNode* node6 = new BinaryTreeNode(6);
	BinaryTreeNode* node7 = new BinaryTreeNode(7);
	BinaryTreeNode* node8 = new BinaryTreeNode(8);
	BinaryTreeNode* node9 = new BinaryTreeNode(9);
	BinaryTreeNode* node10 = new BinaryTreeNode(10);

	root->left = node2;
	root->right = node3;

	node2->left = node4;
	node2->right = node5;

	node4->left = node6;
	node4->right = node7;

	node5->left = node8;
	node5->right = node9;

	node9->left = node10;

	return root;
}

void InOrder(BinaryTreeNode *root)
{
	if(root == NULL)
		return;

	stack<BinaryTreeNode*> s;
	s.push(root);
	BinaryTreeNode* node = root->left;

	while (node != NULL || !s.empty())
	{
		while (node != NULL)
		{
			s.push(node);
			node = node->left;
		}
		node = s.top();
		s.pop();

		printf("%d ", node->value);
		node = node->right;
	}
}

void InOrderR(BinaryTreeNode* root) {
	if (root == NULL) return;
	InOrder(root->left);
	printf("%d ", root->value);
	InOrder(root->right);
}

int main (void)
{
	BinaryTreeNode* root = buildTree();
	printTree(root);
	InOrder(root);
	cout << endl;
	InOrderR(root);
	cout << endl;
	return 0;
}

输出:

1 
2 3 
4 5 
6 7 8 9 
10 
6 4 7 2 8 5 10 9 1 3 
6 4 7 2 8 5 10 9 1 3 



bubuko.com,布布扣



编程算法 - 中序遍历 递归/迭代 代码(C)

标签:mystra   编程算法   中序遍历   递归   迭代   

原文地址:http://blog.csdn.net/caroline_wendy/article/details/39472265

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!