数据结构树叶子节点,根节点和叶子节点关系

问题

给定一个二叉树,返回所有从根节点到叶子节点的路径。

说明: 叶子节点是指没有子节点的节点。

示例:

来源:力扣(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 200typedef 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);}

Published by

风君子

独自遨游何稽首 揭天掀地慰生平

发表回复

您的电子邮箱地址不会被公开。 必填项已用 * 标注