| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 752 人关注过本帖
标题:查找二叉树一个节点的左右子树
只看楼主 加入收藏
寻找梦想1
Rank: 1
等 级:新手上路
帖 子:4
专家分:0
注 册:2013-5-1
结帖率:50%
收藏
已结贴  问题点数:10 回复次数:2 
查找二叉树一个节点的左右子树
#include "stdio.h"
#include "stdlib.h"
int n=0;
int m=0;
typedef struct BiTNode
 {
   char data;
   BiTNode *Lchild,*Rchild; // 左右孩子指针
 }BiTNode,*BiTree;

void CreateBiTree(BiTree &T)
 {
   char ch;
   printf("输入结点值:\n");
   scanf("%c",&ch);
   getchar();
   
   if(ch=='0') // 空
     T=0;
   else
   {
     T=(BiTree)malloc(sizeof(BiTNode));
     T->Lchild=0;
     T->Rchild=0;
     if(!T)
       return;
     T->data=ch; // 生成根结点
     CreateBiTree(T->Lchild); // 构造左子树
     CreateBiTree(T->Rchild); // 构造右子树
   }
 }


void preorder (BiTNode *root)
 {//先序遍历root指向根的二叉树
          if (root!=0)   {
              printf("%c  ", root->data);//访问根结点,这里只是把根结点的值打印出来,
                                         //你可以做其它处理,比如修改、判别等。
              preorder(root->Lchild); //先序遍历根的左子树
              preorder(root->Rchild); //先序遍历根的右子树
          }//if
 }//preorder
void  chazhao(BiTNode *T,char x)
 {
   
    if(T->date==x)
    {
      n=T->Lchild;
      m=T->Rchild;
    }

   
        chazhao(T->Lchild,x);
        chazhao(T->Rchild,x);  
      //  if(num1!=0||num2!=0)   
        //    n++;
    //    return n;  
  }

 

void main()
{
    BiTNode *T;
    CreateBiTree(T);
    preorder(T);
    chazhao(T,'2');
    printf("\n%d\n%d",n,m);
   
}
搜索更多相关主题的帖子: 二叉树 左右 include return 
2013-05-23 21:42
yuccn
Rank: 16Rank: 16Rank: 16Rank: 16
来 自:何方
等 级:版主
威 望:167
帖 子:6815
专家分:42393
注 册:2010-12-16
收藏
得分:5 
问题是什么?还是show代码

我行我乐
公众号:逻辑客栈
我的博客:
https://blog.yuccn. net
2013-05-28 17:37
virus1203
Rank: 2
等 级:禁止访问
帖 子:11
专家分:16
注 册:2013-5-21
收藏
得分:5 
用各种遍历方法查找
 
 
#include "stdio.h"  
#include "iostream"  
#include "stack"  
#include "queue"  
using namespace std;  
 
 
typedef struct node  
 
 
{  
 char data;  
 struct node *right;  
 struct node *lenf;  
}Tree;  
 
 
void CreatTree(Tree *&p,char a[])   //创建一个数,把a[]里的值放到栈中去  
{  
 stack<node *> s;   //定义一个栈  
 int i=0,k;   //定义一个K用来记录是左枝还是右枝,如果是1则为左枝,2为右枝  
 p=NULL;  
 node *x;  //定义一个新的节点  
 while(a!='\0')  //当这个数组没有结束时运行  
 {  
 switch(a)   //看当前这个元素是怎么  
 {  
 case '(' :s.push(x);k=1;break;   //当元素是“(”的时候就把这个元素入栈,把K赋值为1记录为左枝  
 case ',' :k=2;break;   //当元素是“,”的时候就把这个元素入栈,把K赋值为2记录为右枝  
 case ')' :s.pop();break;  //当为  
 default :x=new node();  
 x->data=a;  
 x->lenf=x->right=NULL;  
 if(p==NULL)  
 p=x;  
 else  
 {  
 switch(k)  
 {  
 case 1: s.top()->lenf=x;break;  
 case 2: s.top()->right=x;break;  
 }  
 
 
 }  
 }  
 
 
 i++;  
 }  
}  
 
 
void PreOrder(Tree *p)   //先序遍历  
{  
 if(p!=NULL)  
     {  
 cout<<p->data<<'\t';  
    PreOrder(p->lenf);  
 PreOrder(p->right);  
 }  
}  
void InOrder(Tree *p) //中序遍历  
{  
 if(p!=NULL)  
 {  
    InOrder(p->lenf);  
 cout<<p->data<<'\t';  
 InOrder(p->right);  
 }  
}  
void PostOrder(Tree *p)  //后序遍历  
{  
 if(p!=NULL)  
 {  
    PostOrder(p->lenf);  
 PostOrder(p->right);  
 cout<<p->data<<'\t';  
 }  
}  
void leave(Tree *&s)     //用队列方法显示  
{  
 queue<node *> k;   //定义一个队列  
 Tree *p=s;  //把树的第一个元素给 p  
 k.push(p);  //然后先把第一个元素入队列  
 while(!k.empty())   //判断这个入队列的是否为空  
 {  
 p=k.front();       //  把第队列的第一个的地址给p  
 cout<<p->data<<'\t';   
 k.pop();  //输出后再把这个出队列,用队列的时候都是入一个元素,然后出一个元素  
 if(p->lenf!=NULL)  
 k.push(p->lenf);  
 if(p->right!=NULL)  
 k.push(p->right);  
 }  
}  
int main()  
{  
 Tree *p;  
 char a[]="A(B,C(D(E,F)))";  
 CreatTree(p,a);  
 cout<<endl<<"先序遍历"<<endl;  
 PreOrder(p);  
 cout<<endl<<"中序遍历"<<endl;  
 InOrder(p);  
 cout<<endl<<"后序遍历"<<endl;  
 PostOrder(p);  
 cout<<endl<<"队列输出"<<endl;  
 leave(p);  
 return 0;  
}
2013-05-28 21:35
快速回复:查找二叉树一个节点的左右子树
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.022795 second(s), 8 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved