首页 > 代码库 > 数据结构课程设计题目四_二叉树
数据结构课程设计题目四_二叉树
本文出自: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; }
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。