基于二叉链表的二叉树叶子结点到根结点的路径的求解

基于二叉链表的二叉树叶子结点到根结点的路径的求解

代码有点问题,求大佬解惑

描述

设二叉树中每个结点的元素均为一个字符,按先序遍历的顺序建立二叉链表,编写算法求出每个叶子结点到根结点的路径。

输入

多组数据。每组数据一行,为二叉树的先序序列(序列中元素为‘0’时,表示该结点为空)。当输入只有一个“0”时,输入结束。

输出

每组数据输出n行(n为叶子结点的个数),每行为一个叶子结点到根节点的路径(按照叶子结点从左到右的顺序)。

输入样例 1

abcd00e00f00ig00h00
abd00e00cf00g00
0

输出样例 1

dcba
ecba
fba
gia
hia
dba
eba
fca
gca

#include<iostream> 
#include<string>
#define maxsize 20
using namespace std;
typedef struct Btnode {
	Btnode *lchild, *rchild;
	char data;
}BTnode;
BTnode * creatBTnode(string &a, int &i)
{
	BTnode *bt;
	if (a[i] == '0')
		return NULL;
	else
	{
		bt = new BTnode;
		bt->data = a[i];
		i = i + 1;
		int j = a.length();
		if (i <= a.length())
			bt->lchild = creatBTnode(a, i);
		i = i + 1;
		if (i <= a.length())
			bt->rchild = creatBTnode(a, i);
		return bt;
	}
}
void Path(BTnode *a)
{
	BTnode *l[maxsize], *p = a;
	int top = 0, tag[maxsize];
	while (p || top > 0)
	{
		while (p != NULL)//搜索左子树
		{
			top++;
			l[top] = p;
			tag[top] = 0;
			p = p->lchild;
		}
		if(tag[top]==0)
		{
			if (!l[top]->lchild && !l[top]->rchild)
			{
				for (int i = top; i >= 1; i--)
				{
					cout << l[i]->data;
				}
				cout << endl;
			}
			top = top - 1;
			tag[top] ++;
		}
		if (tag[top] == 1)
		{
			p = l[top]->rchild;
		}
		if (tag[top] == 2)
		{
			top--;
			tag[top]++;
		}
	}
}
int main()
{
	while (1)
	{
		BTnode *boot1, *boot2;
		string a, b;
		int i = 0, j = 0;
		cin >> a;
		BTnode * count[100];
		if (a[0] =='0' )
		{
			break;
		}
		else
		{
			boot1 = creatBTnode(a, i);
			int length = 1, max = 0;
			Path(boot1);
		}
	}
	return 0;
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值