寻找二叉树双亲结点

/*
 * @Issue:  寻找X结点的双亲结点
 * @Author: 一届书生
 * @LastEditTime: 2020-02-25 16:50:27
 */
#include<iostream>
using namespace std;
#define type char
typedef struct node{
    type data;
    node *lchild,*rchild;
}Tree,*Pnode;

// 构造树[先序遍历:中左右]
void creat(Pnode &tree){
    type c;
    cin>>c;
    if(c=='#')tree=NULL;
    else{
        tree=new Tree;
        tree->data=c;
        creat(tree->lchild);
        creat(tree->rchild);
    }
}

// 寻找X结点的双亲结点
void find(Pnode t,Pnode a){ //寻找a的双亲结点
    if(!t)return;
    if(t->lchild){
        if(t->lchild->data==a->data){
            cout<<t->data<<endl;
            return ;
        }
        find(t->lchild,a);
    }
    if(t->rchild){
        if(t->rchild->data==a->data){
            cout<<t->data<<endl;
            return ;
        }
        find(t->rchild,a);
    }
}

// 后序遍历
void display(Pnode &t1){
    if(t1){
    display(t1->lchild);
    display(t1->rchild);
    cout<<t1->data<<"  ";
    }
}


int main(){
    // 样例:AB#CD##E##F#GH###
    /*
            A
          /  
         B     F
               
           C      G  
          /      /
         D    E  H

    */
    Pnode t,a;
    t=new Tree;
    a=new Tree;
    creat(t);

    display(t);
    cout<<endl;
    
    type x;
    cin>>x;
    a->data=x;
    a->lchild=NULL;
    a->rchild=NULL;

    find(t,a);
    return 0;
}

  

原文地址:https://www.cnblogs.com/52dxer/p/12362543.html