C语言 求二叉树根节点到叶子节点的路径

要求输出二叉树的叶子节点和叶子节点到根节点的路径

第1个回答  2009-06-19
它的算法思想应该是
1,以一指针指向该叶子结点并向上(父结点)找,把父节点入栈(方便输出路径)
2,把指针指向父节点,重复上面的过程,直到节点的父节点为空
3,依次出栈输出信息,路径就出来了
(注:此二叉树的节点应包括父指针,左右指针,数据域)

就这么多吧! 要学习程序,就得自己尝试写,写多了就会了

还有什么不懂的可以给我留言 !!本回答被提问者和网友采纳
第2个回答  2016-01-05
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);
}

C语言 求二叉树根节点到叶子节点的路径
1,以一指针指向该叶子结点并向上(父结点)找,把父节点入栈(方便输出路径)2,把指针指向父节点,重复上面的过程,直到节点的父节点为空 3,依次出栈输出信息,路径就出来了 (注:此二叉树的节点应包括父指针,左右指针,数据域)就这么多吧! 要学习程序,就得自己尝试写,写多了就会了 还有...

二级C语言中"告诉了完全二叉树的总结点数,怎么求它的叶子结点数"?
typedef char DataType;\/\/定义DataType类型 typedef struct node{ DataType data;struct node lchild,rchild;\/\/左右孩子子树 }BinTNode;\/\/结点类型 typedef BinTNode BinTree;\/\/二叉树类型 int Node(BinTree T){ \/\/算结点数 if(T)return Node(T->lchild )+ Node (T->rchild )+1;else retur...

C语言二叉树的深度指什么?怎么求?
从根节点到叶子结点一次经过的结点形成树的一条路径,最长路径的长度为树的深度。根节点的深度为1。解体思路:1.如果根节点为空,则深度为0,返回0,递归的出口。2.如果根节点不为空,那么深度至少为1,然后我们求他们左右子树的深度,3.比较左右子树深度值,返回较大的那一个 4.通过递归调用 includ...

怎么用C语言写求一棵二叉树的叶子结点个数
只写函数,root是根节点 int LeafCount(node root){ int i;if(root){ i = !((root->lChild ? 1:0) | (root->rChild? 1:0));return i + LeafCount(root->lChild) + LeafCount(root->rChild);} return 0;}

二级C语言中"告诉了完全二叉树的总结点数,怎么求它的叶子结点数"?
所以肯定699个结点肯定不是满二叉树。。。叶子节点出现在最后两层上。。。最后一层叶子结点个数为:699-(1023-512)=188 倒数第二层的叶子节点数为: (512-188)\/2=162 叶子总数应该是:188+162 = 250 不确定有没有算对.大概思路应该是这样的.希望对你有帮助 ...

精通c语言的亲们,关于二叉树节点怎么计算呢
首先,你要使用到二叉树的遍历。二叉树的遍历有中序遍历,前序遍历和后续遍历。不管你用的是哪一中遍历方式,只要你扫描的某个节点的左右孩子为空,那么该节点就是叶子节点,这时你的计数器加1就行。如:f(binary_tree * head){ int count = 0;binary_tree pt = head;if(head == NULL) break...

二叉树路径
叶子节点 是指没有子节点的节点。递归 没有写成以下是因为,二叉树为空需要返回false 迭代 给你二叉树的根节点 root 和一个整数目标和 targetSum ,找出所有 从根节点到叶子节点 路径总和等于给定目标和的路径。叶子节点 是指没有子节点的节点。示例:递归 迭代 给定一个二叉树,它的每个...

c语言二叉树问题,勿写代码,求详细思考过程
从后序遍历:CDABE得出E是最顶根节点。然后中序遍历:CADEB得出CAD是E的左子树中的,B是E的右子树中的。再分析后序遍历CDA可以知道A是CD的根,而中序是CAD得到C是A的左子树,D是A的右子树。(如下图)最后,先序遍历:若树不空,则先访问根结点,然后依次先根遍历各棵子树。于是得到结束: ...

...树的建立,先序中序后序遍历的操作,求所有叶子结点总数
int leaf=0; \/\/求叶子节点数 int depth(TLNode Tree){ \/\/深度 int s1,s2;if(Tree==NULL)return 0;else{ s1=depth(Tree->lchild);s2=depth(Tree->rchild);if(s1==0 && s2==0) leaf++;return (s1>s2?s1:s2)+1;} } int Cnode(TLNode Tree){ \/\/总结点 int s1,s2;if(...

编写求任意二叉树中一条最长的路径的算法,要求输出此路径上各结点的值...
return(0);return 1+(Depth(T->lchild)>Depth(T->rchild)? Depth(T->lchild):Depth(T->rchild));\/\/选择左右孩子深度高的然后加上根节点这一层就是深度了 } void Long(BiTree T){ if(T!=NULL)\/\/在T不为空的情况下 { visit(T->data);\/\/访问节点 if(Depth(T->lchild)>Depth(T->...

相似回答