二叉树的层次遍历指针方法
#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; }
你若是天才,我便是疯子