1. 程式人生 > >【TOJ 1004】

【TOJ 1004】

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】