问题
给定一个二叉树,返回所有从根节点到叶子节点的路径。
说明: 叶子节点是指没有子节点的节点。
示例:

来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/binary-tree-paths
257.二叉树的所有路径
与此问题类似的问题
数据结构——二叉树的最长路径问题
思路:
- 遇到的是叶子结点,将当前结点输出(也就不需要进入数组了),并将数组的元素逆序输出。
- 遇到的不是叶子结点,将该元素进入数组。递归实现左右子树。
核心代码
void leaf_root(BiTree T,int *path,int len)
{
if(T)
{
if(T->lchild==NULL&&T->rchild==NULL)//当T为叶子结点时,逆序输出
{
printf("%c->",T->data);
for(int i=len-1;i>0;i--)
{
printf("%c->",path[i]);
}
printf("%c",path[0]);
printf("\n");
}
else//当不为终端结点时,该节点对应的值进入数组
{
path[len++]=T->data;
leaf_root(T->lchild,path,len);
leaf_root(T->rchild,path,len);
}
}
}
全部代码(可以直接运行)
#include<stdio.h>
#include<bits/stdc++.h>
#define MAX 200
typedef char TElemType;
typedef int status;
typedef struct BiNode
{
TElemType data;
struct BiNode *lchild;
struct BiNode *rchild;
}BiNode,*BiTree;
void CreateBiTree(BiTree &T)//二叉树的先序创建
{
TElemType ch;
scanf("%c",&ch);
if(ch=='#')
T=NULL;
else
{
T=(BiNode*)malloc(sizeof(BiNode));
if(!T)
exit(-1);
T->data=ch;
CreateBiTree(T->lchild);
CreateBiTree(T->rchild);
}
}
void leaf_root(BiTree T,int *path,int len)
{
if(T)
{
if(T->lchild==NULL&&T->rchild==NULL)//当T为叶子结点时,逆序输出
{
printf("%c->",T->data);
for(int i=len-1;i>0;i--)
{
printf("%c->",path[i]);
}
printf("%c",path[0]);
printf("\n");
}
else//当不为终端结点时,该节点对应的值进入数组
{
path[len++]=T->data;
leaf_root(T->lchild,path,len);
leaf_root(T->rchild,path,len);
}
}
}
int main()
{
BiTree T;
printf("创建树输入树T的先序序列(其中使用#代表空节点)\n");
CreateBiTree(T);
int path[MAX]={0};
int len=0;
printf("输出全部从叶子结点到根节点的路径:\n");
leaf_root(T,path,len);
}


2096



被折叠的 条评论
为什么被折叠?



