C语言 求二叉树根节点到叶子节点的路径
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了C语言 求二叉树根节点到叶子节点的路径相关的知识,希望对你有一定的参考价值。
要求输出二叉树的叶子节点和叶子节点到根节点的路径
参考技术A 它的算法思想应该是1,以一指针指向该叶子结点并向上(父结点)找,把父节点入栈(方便输出路径)
2,把指针指向父节点,重复上面的过程,直到节点的父节点为空
3,依次出栈输出信息,路径就出来了
(注:此二叉树的节点应包括父指针,左右指针,数据域)
就这么多吧! 要学习程序,就得自己尝试写,写多了就会了
还有什么不懂的可以给我留言 !!本回答被提问者和网友采纳 参考技术B typedef char KeyType;
typedef struct Node
KeyType key;
struct Node *lchild, *rchild;
BTNode, *BTree;
char Paths[20];
void OutPutPath( )
printf("%s\n", Paths);
void LeavesPath(BTree tree, int level)
if(tree == NULL) return;
Paths[level] = tree->key;
if((tree->lchild == NULL) && (tree->rchild == NULL))
Paths[level + 1] = '\0';
OutPutPath( );
return;
LeavesPath(tree->lchild, level + 1);
LeavesPath(tree->rchild, level + 1);
二叉树根节点到叶子节点的所有路径和(NC5/考察次数Top53/难度中等)
描述:
给定一个仅包含数字\\ 0-9 0−9 的二叉树,每一条从根节点到叶子节点的路径都可以用一个数字表示。
例如根节点到叶子节点的一条路径是1\\to 2\\to 31→2→3,那么这条路径就用\\ 123 123 来代替。
找出根节点到叶子节点的所有路径表示的数字之和
例如:
这颗二叉树一共有两条路径,
根节点到叶子节点的路径 1\\to 21→2 用数字\\ 12 12 代替
根节点到叶子节点的路径 1\\to 31→3 用数字\\ 13 13 代替
所以答案为\\ 12+13=25 12+13=25
示例1
输入:
{1,0}
返回值:
10
(题目来自牛客网)
用C++实现如下
class Solution {
public:
/**
*
* @param root TreeNode类
* @return int整型
*/
int sumNumbers(TreeNode* root) {
//计算 根节点 到 叶子节点 的所有路径和
if(!root)
return 0;
return preOrder(root,0); //利用先序遍历求解和公式进行求解;
}
int preOrder(TreeNode* root, int sum)
{
if(!root)
return 0;
sum=10*sum+root->val; //对根节点到叶子节点的表示
if(!root->left && !root->right)
return sum; //左右都为空了返回
return preOrder(root->left,sum)+preOrder(root->right,sum);
} //否则返回左边求解公式和右边求解公式之和
};
纯手撕代码,如果觉得内容不错麻烦点个赞,后面陆续配上Top100算法题通俗易懂的讲解视频,可以花两个月时间完全掌握,进大厂不是梦,转行狗亲测!
以上是关于C语言 求二叉树根节点到叶子节点的路径的主要内容,如果未能解决你的问题,请参考以下文章
[javascript]二叉树根节点到叶子节点和为指定值的路径