生活随笔
收集整理的這篇文章主要介紹了
POJ 1577 Falling Leaves(二叉查找树)
小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.
題目鏈接:http://poj.org/problem?id=1577
題目大意:
二叉查找樹按照葉子節(jié)點(diǎn),從下往上抹去該樹,給出抹除字符序列,求該二叉樹,并前序打印
解題思路:
最后抹除的是根節(jié)點(diǎn),把抹除的字符序列,逆序插入到一棵空的二叉查找樹就是答案。
AC代碼:
#include <iostream>
#include <vector>
using namespace std
;
struct node
{char ch
;node
*left
, *right
;node(char &ch
):ch(ch
),left(NULL),right(NULL){}
};
class BST
{
public:node
* root
;BST():root(NULL){}void insert(char &ch
){node
*p
= root
, *prev
;while(p
!= NULL){prev
= p
;if(ch
< p
->ch
)p
= p
->left
;elsep
= p
->right
;}if(root
== NULL){root
= new node(ch
);return;}if(ch
< prev
->ch
)prev
->left
= new node(ch
);elseprev
->right
= new node(ch
);}void del(){del(root
);}void del(node
* p
){if(p
!= NULL){del(p
->left
);del(p
->right
);delete p
;}}void preOrderPrint(node
* p
){if(p
!= NULL){cout
<< p
->ch
;preOrderPrint(p
->left
);preOrderPrint(p
->right
);}}
};
bool saveChToStr(string
& str
)
{bool flag
;char ch
;while(cin
.get(ch
)){if(ch
== '*'){flag
= true;break;}else if(ch
== '$'){flag
= false;break;}if(ch
== '\n')continue;str
.push_back(ch
);}return flag
;
}
int main()
{bool flag
;do{string str
;BST tree
;flag
= saveChToStr(str
);for(int i
= str
.length()-1; i
>= 0; --i
){tree
.insert(str
[i
]);}tree
.preOrderPrint(tree
.root
);cout
<< endl
;tree
.del();}while(flag
);return 0;
}
總結(jié)
以上是生活随笔為你收集整理的POJ 1577 Falling Leaves(二叉查找树)的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。