数据结构算法-关于求二叉树的最低公共结点

问题描述

关于求二叉树的最低公共结点
源代码:

int hasnode(bitree tchar c)
{
if(!t)
return 0;
else if(t->data==c)
return 1;
return (hasnode(t->lchildc)||hasnode(t->rchildc));
}

bitree commonfather(bitree tchar c1char c2)
{
if(hasnode(tc1)==0||hasnode(tc2)==0)
return 0;
while(1)
{
if((hasnode(t->lchildc1)&&hasnode(t->rchildc2))||(hasnode(t->lchildc2)&&hasnode(t->rchildc1)))
return t;
else if(hasnode(t->lchildc1))
t=t->lchild;
else t=t->rchild;
}
}

前面那个函数测试成功了,但是后面那个函数怎么都没办法正常运行。求助求助!(>o<)

解决方案

http://blog.csdn.net/chosen0ne/article/details/6129847

解决方案二:
二叉树的最低公共父节点
二叉树的最低公共父节点
求一棵普通树的两个结点的最低公共祖先

时间: 2024-12-14 10:15:42

数据结构算法-关于求二叉树的最低公共结点的相关文章

语言-试编写算法,求二叉树T中结点a和b的最近共同祖先。

问题描述 试编写算法,求二叉树T中结点a和b的最近共同祖先. 试编写算法,求二叉树T中结点a和b的最近共同祖先.二叉链表类型定义:typedef struct BiTNode { TElemType data; struct BiTNode lchild*rchild;} BiTNode *BiTree;可用栈类型Stack的相关定义:typedef struct { BiTNode *ptr; // 二叉树结点的指针类型 int tag; // 0..1} SElemType; // 栈的元素

使用C语言求二叉树结点的最低公共祖先的方法_C 语言

算法分析 我们直接来分析O(n)的算法. 比如求节点F和节点H的最低公共祖先,先求出从根节点A到F的路径,再求出A到H的路径,那么最后一个相同的节点就是最低公共祖先.A->B->D->F和A->B->E->H,最后相同的节点事B,所以最低公共祖先是B节点.求根节点到指定节点的算法先前已经更新过了,复杂度是O(n),所以总的时间复杂度是O(n). 条件细化: (1)树如果是二叉树,而且是二叉排序树.              这中条件下可以使用二叉排序树的搜索功能找到最低

max hl-数据结构二叉树求二叉树深度算法

问题描述 数据结构二叉树求二叉树深度算法 c:documents and settingsadministratoroo.cpp(79) : error C2065: 'max' : undeclared identifier

指针-哪里有问题?求解答,数据结构算法的问题

问题描述 哪里有问题?求解答,数据结构算法的问题 /* 设计一个算法,将两个非递减的链表合并成一个非递增的有序链表 要求使用原来的存储空间,不开辟新的空间,表中允许有重复的数据./ / 我的思路是: 使用L1的头结点作为新表L3的头结点,然后让L1头结点的指针域置空, 从L1和L2中选择较大的结点,使用头插法插入到L3的后面, 为什么运行不了?求大神解答! */ void Combine(LinkList &L1,LinkList &L2,LinkList &L3){ struct

c语言-关于数据结构的简单问题完整算法 C语言 假设用邻接矩阵存储无向图,设计算法,求出度数最大的顶点编号

问题描述 关于数据结构的简单问题完整算法 C语言 假设用邻接矩阵存储无向图,设计算法,求出度数最大的顶点编号 假设用邻接矩阵存储无向图,设计算法,求出度数最大的顶点编号 急急急紧急急急急急急急急急急急急急急急急急急急急急急 解决方案 先是存储结构后是伪代码,你想要算法就看注释吧~ Typedef struct Node { Char vex; //顶点 Int degree; //度数 }Node; Node ArrDegree[m]; //m+1为顶点个数 For(i =0; i ArrDeg

【算法导论】求二叉树的叶子数和深度

二叉树的叶子数和深度 二叉树的遍历算法是许多二叉树运算的算法设计的基础,因此遍历算法的应用很广泛.下面以遍历算法求二叉树的叶子数和深度为例,来加深对于二叉树遍历算法的理解.1. 统计二叉树中的叶子结点数因为叶子结点是二叉树中那些左孩子和右孩子均不存在的结点,所以可在二叉树的遍历过程中,对这种特殊结点进行计数,来完成对叶子结点数的统计.这个统计可在任何一种遍历方式下给出,下面是利用中序遍历来实现的算法: /**********************************************

线性表-数据结构 算法如何编译运行··跪求各位路过的大神帮帮忙啊

问题描述 数据结构 算法如何编译运行··跪求各位路过的大神帮帮忙啊 #include #include #define ERROR 0 #define OK 1 typedef int Status; typedef int ElemType;//顺序表测试用 const int MaxSize=100; //100只是示例性的数据,可以根据实际问题具体定义 const int Increasement=10; typedef struct{ ElemType *elem; int length

文本比较算法Ⅶ——线性空间求最长公共子序列的Nakatsu算法

在参阅<A Longest Common Subsequence Algorithm Suitable for Similar Text Strings>(Narao Nakatsu,Yahiko Kambayashi,Shuzo Yajima著)后.发现该算法可以利用线性空间求出最长公共子序列.该算法的时间占用O(n(m-p+1)),p为最长公共子序列的长度.   字符串A和字符串B,计算LCS(A,B) 定义一:设M=Len(A),N=Len(B),不妨设M≤N. 定义二:A=a1a2--

新手求救-新手想做一个算法,求思路

问题描述 新手想做一个算法,求思路 我是一名学生,正在做数据结构的课程设计,我想实现一个算法:对已录入的数据进行折半查找后,将所得数据和小于所得数据按高位排序显示,用VC写,求大神指点 解决方案 讲所得数据和小于所得数据按高位排序是什么意思??可以明确点吗?? 解决方案二: 数据用二叉树存储,二叉树查找类似折半查找,找到后用递归查找比他小的子二叉树