首页 > 代码库 > 数据结构课程设计题目四_二叉树

数据结构课程设计题目四_二叉树

本文出自:http://blog.csdn.net/svitter

题目4:二叉树

给出一颗无线的二叉树。树的每一个结点用一整数对标识。二叉树构造如下
树根被标识为(1, 1);

如果一个结点被标识为(a, b), 则其左孩子被标识为(a+b,b),右孩子被标识为(a, a+b)。现在给出某一结点(a, b),求树根到该结点的最短路径,并且同时求出从树根出发向左走和向右走的次数。建议完成人数1人。

注:此处使用了STL_stack库函数,是不允许的,我图方便。


//============================================================================
// Name        : BinaryTree.cpp
// Author      : Vit
// Version     : 1.0
// Copyright   : Your copyright notice
// Description : Hello World in C++, Ansi-style
//============================================================================

#include <iostream>
#include <stdio.h>
#include <stack>
using namespace std;

struct path
{
	int a;
	int b;
	path(int c, int d):a(c), b(d){}
	void print()
	{
		printf(" (%d, %d)", a, b);
	}
};

int main()
{
	int left, right;
	int a, b;
	stack <path> s;
	while(~scanf("%d%d", &a, &b ))
	{
		if(a == b && a != 1)
		{
			printf("impossible\n");
			continue;
		}
		right = left = 0;
		while(a != b)
		{
			if(a > b)
			{
				left++;
				s.push(path(a,b));
				a = a - b;
			}
			else
			{
				right++;
				s.push(path(a,b));
				b = b - a;
			}
		}
		printf("left_num: %d\nright_num:%d\n", left ,right);
		printf("(1,1)");
		while(!s.empty())
		{
			path b = s.top();
			s.pop();
			b.print();
		}
		printf("\n\n");
	}
	return 0;
}