中国大学MOOC浙大数据结构04-树6 Complete Binary Search Tree (30分) 两种解题方法(2)
2020-06-05 08:33
302 查看
本解法与上一解法比较,采用数组名存储节点值,基本全部采用int类型,因为数值大小不超过2000,所以存储空间占得更小一点。可惜的是,对于最后一个测试点,不知为何总是答案错误,多次模拟输入也未能发现原因,望指正。
#include<queue> #include<stdio.h> #include<iostream> #include<stdlib.h> #include<algorithm> #include<math.h> #define null 0 #define MAXSIZE 2002 using namespace std; struct TreeNode { int Left; int Right; }T1[MAXSIZE]; int BuildTree(int a[], int i, int j) { int num = j - i + 1;//指示元素个数 if (num == 1)//只传进来一个元素就返回它 return a[i]; int height;//指示多少行 for (height = 0; pow(2, height) - 1 < num; height++);//num=3,height=2;num=4,height=3 int lastnum = num - pow(2, height - 1) + 1;//记录最底下一排的个数,num=4,height=3,lastnum=1; int rightnum, leftnum; if (lastnum > pow(2, height - 2)) { rightnum = lastnum - pow(2, height - 2); leftnum = lastnum - rightnum; } else { rightnum = 0; leftnum = lastnum; } int dif = leftnum - rightnum; int mid = (i + j + dif) / 2; if (mid - 1 >= i) T1[a[mid]].Left = BuildTree(a, i, mid - 1); else T1[a[mid]].Left = null; if (j >= mid + 1) T1[a[mid]].Right = BuildTree(a, mid + 1, j); else T1[a[mid]].Right= null; return a[mid]; } void LevelTraversals(int Root) { queue<int> Q; int T; Q.push(Root); int tag = 0; while (!Q.empty()) { T = Q.front(); Q.pop(); if (tag == 0) { printf("%d", T); tag++; } else printf(" %d", T); if(T1[T].Left!=null)Q.push(T1[T].Left); if(T1[T].Right!=null)Q.push(T1[T].Right); } } int main() { int N; scanf("%d", &N); int* a = (int*)malloc((N + 1) * sizeof(int)); for (int i = 1; i <= N; i++) scanf("%d", &a[i]); sort(a + 1, a + N + 1); int Root = BuildTree(a, 1, N); LevelTraversals(Root); return 0; }
相关文章推荐
- 04-树6 Complete Binary Search Tree (30分)【Python】【数据结构学习(2)】
- PAT 数据结构 04-树8. Complete Binary Search Tree (30)
- 04-树6 Complete Binary Search Tree (30分)(数据结构)(C语言实现)
- 04-树6 Complete Binary Search Tree (30分)
- 04-树6 Complete Binary Search Tree (30分)
- 04-树6 Complete Binary Search Tree
- 04-树6 Complete Binary Search Tree
- 04-树6 Complete Binary Search Tree(30 point(s))
- PAT04-树6 Complete Binary Search Tree 【JAVA实现】
- 04-树6 Complete Binary Search Tree
- 04-树6 Complete Binary Search Tree
- PAT : 04-树5. Complete Binary Search Tree (30)
- 04-树8. Complete Binary Search Tree (30)
- 浙大PAT 1064. Complete Binary Search Tree
- 04-树5. Complete Binary Search Tree (30)
- 1064 Complete Binary Search Tree (30分) 推荐:3星
- 浙大PAT 1064. Complete Binary Search Tree
- 1110. Complete Binary Tree (25) -- 完全二叉树相关性质, 求树根两种方法
- leetCode 98.Validate Binary Search Tree (有效二叉搜索树) 解题思路和方法
- Complete Binary Search Tree(mooc)