求二叉树种节点的最近的祖先节点

中序遍历:遇到一个节点后将返回值置为1, 如果左右子树返回值都是1那么这就是一个公共祖先,最近就是第一个,做一个标志位判断一下就可以了

代码如下:

// left 2*n + 1 right 2*n +2
int travel(int t[],int s,int l,int* p,int a,int b)
{
    
int tt = 0;
    
if(s<l)
    {

        tt 
+=travel(t,2*s+1,l,p,a,b);
        
//cout<<t[s]<<endl;
        if(t[s] == a || t[s] == b)
            
return 1;
        tt
+=travel(t,2*s+2,l,p,a,b);
    }
    
if(tt == 2 && *== -1)
    {
        
*= s;
    }
    
return tt;
}
void main()
{
    
int tree[]={1,2,3,4,5,6,7,8,9};
    
int p = -1;
    travel(tree,
0,sizeof(tree)/sizeof(int),&p,4,6);
    cout
<<p<<endl;
}

 

最近想算法想得头晕 ,是不是不太适合搞代码?哎

码工的无奈啊 

posted @ 2010-08-16 11:08  David Luo  阅读(238)  评论(0编辑  收藏  举报