1 条题解
-
0
C++ :
#include <iostream> #include <cstdio> using namespace std; struct Node { int val, dep; //结点的权值、深度 Node *ch[2]; //ch[1]:右子树, ch[0]:左子树 Node(const int& _val) : val(_val) { ch[0] = ch[1] = nullptr, dep = 0; } } *Root(nullptr); int N, Ai, Dep; void Insert(const int& val) //将val插入到BST中 { Node *x(Root), *y(nullptr); while(x) //寻找插入的位置 y = x, x = x -> ch[val > x -> val]; //若val>x->val则在右子树,反之在左子树 x = new Node(val); if(y) y -> ch[val > y -> val] = x, x -> dep = y -> dep + 1; else Root = x, x -> dep = 1; Dep = max(Dep, x -> dep); //插入BST并维护结点及其父亲信息 } void Out(const Node* x) //后序遍历:左 右 根 { if(x -> ch[0]) Out(x -> ch[0]); if(x -> ch[1]) Out(x -> ch[1]); printf("%d\n", x -> val); } int main() { cin >> N; while(N--) { scanf("%d", &Ai); Insert(Ai); } printf("deep=%d\n", Dep); Out(Root); return 0; }
- 1
信息
- ID
- 1741
- 时间
- 1000ms
- 内存
- 128MiB
- 难度
- 10
- 标签
- (无)
- 递交数
- 1
- 已通过
- 1
- 上传者