【TOJ 1004】
阿新 • • 發佈:2018-05-07
malloc AI can AC bit bits ott stack col
描述
給定一顆二叉樹,按照層次順序遍歷,但在遍歷時從最底下開始,編寫函數並將各層節點通過vector返回。
二叉樹節點類定義如下:
class TreeNode
{
public:
int val;
TreeNode *left;
TreeNode *right;
TreeNode(int x) : val(x), left(NULL), right(NULL) {}
};
題目部分代碼已經完成,您只需要補充並提交以下函數(外部函數形式):
vector<vector<int> > levelOrderBottom(TreeNode *root);
輸入
輸入描述了一棵二叉樹,使用若幹個整數(不超過512)表示一棵二叉樹順序表示時的結點元素值,其中0表示二叉樹對應結點為空,以-1結束。
輸出
輸出層次遍歷的結果,每層一行,每行的元素用空格隔開。
樣例輸入
1 2 3 0 0 4 5 -1
樣例輸出
4 5
2 3
1
#include<bits/stdc++.h> using namespace std; class TreeNode { public: int val; TreeNode *left; TreeNode *right; TreeNode(int x) : val(x), left(NULL), right(NULL) {} }; TreeNode*creat() { int front=1,rear=0,x; TreeNode*qu[1005],*t,*root=NULL; while(scanf("%d",&x)!=EOF,x!=-1) { if(!x) t=NULL; else { t=(TreeNode*)malloc(sizeof(TreeNode)); t->val=x; t->left=NULL; t->right=NULL; } qu[++rear]=t; if(rear==1) root=t; else { if(t&&qu[front]) { if(rear%2==0) qu[front]->left=t; else qu[front]->right=t; } if(rear%2==1) front++; } } return root; } vector<vector<int> > levelOrderBottom(TreeNode *root) { vector<vector<int> >vv; vector<int>v; stack<vector<int> >st; queue<TreeNode*>qu1,qu2; if(!root) return vv; qu1.push(root); while(!qu1.empty()||!qu2.empty()) { while(!qu1.empty()) { TreeNode*t=qu1.front(); qu1.pop(); v.push_back(t->val); if(t->left) qu2.push(t->left); if(t->right) qu2.push(t->right); } if(!v.empty()) { st.push(v); v.clear(); } while(!qu2.empty()) { TreeNode*t=qu2.front(); qu2.pop(); v.push_back(t->val); if(t->left) qu1.push(t->left); if(t->right) qu1.push(t->right); } if(!v.empty()) { st.push(v); v.clear(); } } while(!st.empty()) { v=st.top(); st.pop(); vv.push_back(v); } return vv; } int main() { TreeNode*x=creat(); vector<vector<int> >v=levelOrderBottom(x); int i,j; for(i=0;i<v.size();i++) { for(j=0;j<v[i].size();j++) { if(j==0) printf("%d",v[i][j]); else printf(" %d",v[i][j]); } printf("\n"); } return 0; }
【TOJ 1004】