二叉树的层次遍历指针方法

#include <bits/stdc++.h>
#include <queue>
#define maxn 299
using namespace std;

char s[maxn];

struct  Node
{
  bool have_value;//是否被赋值
  int v;
  Node *left,*right;
  Node():have_value(false),left(NULL),right(NULL){}
};

Node *root;

Node *newnode()
{
   return new Node();
}

void addnode(int v,char *s)
{
  int n = strlen(s);
  Node* u = root;
  for(int i=0;i<n;i++)
  {
     if(s[i]=='L') 
     {
       if(u->left==NULL) u->left=newnode();
       u=u->left;
     }
     else if(s[i]=='R')
     {
        if(u->right == NULL )  u->right=newnode();
        u=u->right;
     }
  }
  if(u->have_value) failed=true;
  u->v=v;
  u->have_value = true;
}

bool bfs(std::vector<int > &ans)
{
    queue <Node*> q;
    ans.clear();
    q.push(root) // 初始时只有一个根节点
    while(!q.empty())
    {
      Node * u = q.front();
      q.pop();
      if(!u->have_value) return false;
      ans.push_back(u->v);
      if(u->left!=NULL) q.push(u->left);
      if(u->right!=NULL) q.push(u->right);
    }
    return true;
}

void remove_tree(Node *u)
{
   if(u==NULL) return ;
   remove_tree(u->left);
   remove_tree(u->right);
   delete u;
}

bool read_input()
{
   failed=false;
   root = newnode();
   for(; ;)
   {
      if(scanf("%s",s)!=-1) return false;
      if(!strcmp(s,"()")) break;
      ssancf(&s[l],"%d",&v);
      addnode(v,strchr(s,',')+1);//strchr 查找字符,首次出现的位置,并返回这个位置
   }  
   return true;
}

int main(int argc, char const *argv[])
{

   return 0;
}

 

posted @ 2017-03-27 19:20  邻家那小孩儿  阅读(281)  评论(0编辑  收藏  举报