输出利用先序遍历创建的二叉树中的指定结点的度

输出利用先序遍历创建的二叉树中的指定结点的度

1000(ms)

10000(kb)

2761 / 8020

利用先序递归遍历算法创建二叉树并输出该二叉树中指定结点的度。约定二叉树结点数据为单个大写英文字符。当接收的数据是字符“#”时表示该结点不需要创建,否则创建该结点。最后再输出创建完成的二叉树中的指定结点的度。注意输入数据序列中的字符“#”和非“#”字符的序列及个数关系,这会最终决定创建的二叉树的形态。

输入

输入用例分2行输入,第一行接受键盘输入的由大写英文字符和“#”字符构成的一个字符串(用于创建对应的二叉树),第二行为指定的结点数据。

输出

用一行输出该用例对应的二叉树中指定结点的度。

样例输入

A##

A

ABC####

B

样例输出

0

1

#include
#include
#include
using namespace std;
typedef struct node{
   char data;
   struct node* left;
   struct node* right;
}BTree;
void init(BTree*& head){
    head=(BTree*)malloc(sizeof(BTree));
    head->left = NULL;
    head->right = NULL;
}
void createTree(BTree*& node){
    char ch;
    cin>>ch;
    if(ch=='#'){
       node = NULL;
       return;
    }else{
       init(node);
       node->data= ch;
       node->left = NULL;
       node->right =NULL;
       createTree(node->left);
       createTree(node->right);
    }

}
void findDegreeNode(BTree*& node,char ch){
    if(node == NULL) return;
    if(node->data !=ch){
        findDegreeNode(node->left,ch);
        findDegreeNode(node->right,ch);
    }else{
      if(node->left!=NULL&&node->right!=NULL) printf("2");
      if(node->left!=NULL&&node->right==NULL) printf("1");
      if(node->left==NULL&&node->right!=NULL) printf("1");
      if(node->left==NULL&&node->right==NULL) printf("0");
    }
}
int main(){
   BTree* head;
   createTree(head);
   char ch;
   cin>>ch;
   findDegreeNode(head,ch);
   return 0;
}

 

你可能感兴趣的:(计算机)