1043. Is It a Binary Search Tree (25)

来源:互联网 发布:cas php client 编辑:程序博客网 时间:2024/06/05 06:24

考察建立二叉树,以及树的遍历

#include<iostream>#include<vector>#include<queue>typedef struct Node{int key;Node* left;Node* right;Node(Node* _l = NULL, Node* _r = NULL, int _k = -1):left(_l), right(_r),key(_k){};}Node;void InsertTree(Node* &tree, int key){Node** p = &tree;while((*p) != NULL){if( key < (*p)->key )p = &(*p)->left;else p = &(*p)->right;}(*p) = new Node;(*p)->key = key;}void ReleaseTree(Node* tree){std::queue<Node*> q;q.push(tree);while(!q.empty()){Node* p = q.front();q.pop();if(p){q.push(p->left);q.push(p->right);delete p;}}}void TravelRootLR(Node* tree, std::vector<int>& v){if(tree == NULL) return;v.push_back(tree->key);TravelRootLR(tree->left, v);TravelRootLR(tree->right, v);}void TravelRootRL(Node* tree, std::vector<int>& v){if(tree == NULL) return;v.push_back(tree->key);TravelRootRL(tree->right, v);TravelRootRL(tree->left, v);}void TravelLRRoot(Node* tree, std::vector<int>& v){if(tree == NULL) return;TravelLRRoot(tree->left, v);TravelLRRoot(tree->right, v);v.push_back(tree->key);}void TravelRLRoot(Node* tree, std::vector<int>& v){if(tree == NULL) return;TravelRLRoot(tree->right, v);TravelRLRoot(tree->left, v);v.push_back(tree->key);}int main(){int n;while(scanf("%d",&n)!=EOF){std::vector<int> inputVec(n);for(int i = 0; i < n; ++i)scanf("%d",&inputVec[i]);//build treeNode* tree = NULL;for(int i = 0; i < n; ++i)InsertTree(tree, inputVec[i]);//get RootLR & RootRL & RLRootstd::vector<int> t1, t2, t3;TravelRootLR(tree, t1);TravelRootRL(tree, t2);//judge//int size = (int)t3.size();//if( IsSame(inputVec, t1) || IsSame(inputVec, t2) )if(inputVec == t1){printf("YES\n");TravelLRRoot(tree, t3);int size = (int)t3.size();for(int i = 0; i < size-1; ++i)printf("%d ", t3[i]);printf("%d\n", t3[size-1]);}else if(inputVec == t2){printf("YES\n");TravelRLRoot(tree, t3);int size = (int)t3.size();for(int i = 0; i < size-1; ++i)printf("%d ", t3[i]);printf("%d\n", t3[size-1]);}else {printf("NO\n");}ReleaseTree(tree);}return 0;}


 

原创粉丝点击