【二叉查找树】04根据升序数组构造二叉查找树【Convert Sorted Array to Binary Search Tree】
2014-04-08 16:54
375 查看
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++给定一个升序的数组,把他转换成一个高度平衡的二叉查找树
Given an array where elements are sorted in ascending order, convert it to a height balanced BST.
BinaryTree.cpp:
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Given an array where elements are sorted in ascending order, convert it to a height balanced BST.
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
递归的方法:
test.cpp:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 | #include <iostream> #include <cstdio> #include <stack> #include <vector> #include "BinaryTree.h"using namespace std;/** * Definition for binary tree * struct TreeNode { * int val; * TreeNode *left; * TreeNode *right; * TreeNode(int x) : val(x), left(NULL), right(NULL) {} * }; */ TreeNode *tobst(vector<int> num, int begin, int end) {if(begin > end) { return NULL; } if(begin == end) { return new TreeNode(num[begin]); } int mid = begin + (end - begin) / 2; TreeNode *tmp = new TreeNode(num[mid]); tmp->left = tobst(num, begin, mid - 1); tmp->right = tobst(num, mid + 1, end); return tmp; }TreeNode *sortedArrayToBST(vector<int> &num) { return tobst(num, 0, num.size() - 1); }vector<vector<int> > levelOrder(TreeNode *root) {vector<vector<int> > matrix; if(root == NULL) { return matrix; } vector<int> temp; temp.push_back(root->val); matrix.push_back(temp);vector<TreeNode *> path; path.push_back(root);int count = 1; while(!path.empty()) { TreeNode *tn = path.front(); if(tn->left) { path.push_back(tn->left); } if(tn->right) { path.push_back(tn->right); } path.erase(path.begin()); count--;if(count == 0) { vector<int> tmp; vector<TreeNode *>::iterator it = path.begin(); for(; it != path.end(); ++it) { tmp.push_back((*it)->val); } if(tmp.size() > 0) { matrix.push_back(tmp); } count = path.size(); } } return matrix; }// 树中结点含有分叉, // 4 // / \ // 2 6 // / \ / \ // 1 3 5 7 int main() { int arr[7] = {1, 2, 3, 4, 5, 6, 7}; vector<int> num(arr, arr + 7);TreeNode *root = sortedArrayToBST(num);vector<vector<int> > ans = levelOrder(root);for (int i = 0; i < ans.size(); ++i) { for (int j = 0; j < ans[i].size(); ++j) { cout << ans[i][j] << " "; } } cout << endl; DestroyTree(root); return 0; } |
结果输出:
4 2 6 1 3 5 7BinaryTree.h:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 | #ifndef _BINARY_TREE_H_ #define _BINARY_TREE_H_struct TreeNode { int val; TreeNode *left; TreeNode *right; TreeNode(int x) : val(x), left(NULL), right(NULL) {} };TreeNode *CreateBinaryTreeNode(int value); void ConnectTreeNodes(TreeNode *pParent, TreeNode *pLeft, TreeNode *pRight); void PrintTreeNode(TreeNode *pNode); void PrintTree(TreeNode *pRoot); void DestroyTree(TreeNode *pRoot);#endif /*_BINARY_TREE_H_*/ |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 | #include <iostream> #include <cstdio> #include "BinaryTree.h"using namespace std;/** * Definition for binary tree * struct TreeNode { * int val; * TreeNode *left; * TreeNode *right; * TreeNode(int x) : val(x), left(NULL), right(NULL) {} * }; *///创建结点 TreeNode *CreateBinaryTreeNode(int value) { TreeNode *pNode = new TreeNode(value);return pNode; }//连接结点 void ConnectTreeNodes(TreeNode *pParent, TreeNode *pLeft, TreeNode *pRight) { if(pParent != NULL) { pParent->left = pLeft; pParent->right = pRight; } }//打印节点内容以及左右子结点内容 void PrintTreeNode(TreeNode *pNode) { if(pNode != NULL) { printf("value of this node is: %d\n", pNode->val);if(pNode->left != NULL) printf("value of its left child is: %d.\n", pNode->left->val); else printf("left child is null.\n");if(pNode->right != NULL) printf("value of its right child is: %d.\n", pNode->right->val); else printf("right child is null.\n"); } else { printf("this node is null.\n"); }printf("\n"); }//前序遍历递归方法打印结点内容 void PrintTree(TreeNode *pRoot) { PrintTreeNode(pRoot);if(pRoot != NULL) { if(pRoot->left != NULL) PrintTree(pRoot->left);if(pRoot->right != NULL) PrintTree(pRoot->right); } }void DestroyTree(TreeNode *pRoot) { if(pRoot != NULL) { TreeNode *pLeft = pRoot->left; TreeNode *pRight = pRoot->right;delete pRoot; pRoot = NULL;DestroyTree(pLeft); DestroyTree(pRight); } } |
相关文章推荐
- 根据有序数组构造二叉查找树 Convert Sorted Array to Binary Search Tree
- Leetcode 108 Convert Sorted Array to Binary Search Tree 有序数组构造平衡二叉查找树
- 【二叉查找树】05根据升序的链表构造二叉查找树【Convert Sorted List to Binary Search Tree】
- 根据单链表构造二叉查找树 Convert Sorted List to Binary Search Tree
- Convert Sorted Array to Binary Search Tree (递增数组建高度平衡的二叉查找树)【leetcode】
- Leetcode Convert Sorted Array to Binary Search Tree 有序数组转换成二叉搜索树BST
- [leetcode]Convert Sorted Array to Binary Search Tree (有序数组转化为二叉搜索树 C语言)
- Convert Sorted Array to Binary Search Tree 将排序的数组转换为二叉搜索树
- 有序数组转换为平衡二叉搜索树(Convert Sorted Array to Binary Search Tree)
- LeetCode108_Convert SortedArray to BinarySearchTree(将有序数组转成二叉排序树) Java题解
- LeetCode | Convert Sorted Array to Binary Search Tree(有序数组转换成平衡二叉树搜索树)
- LeetCode-108-Convert Sorted Array to Binary Search Tree(转化已排序数组到二叉排序树)
- LeetCode OJ 之 Convert Sorted Array to Binary Search Tree(把有序数组转化为二叉搜索树)
- LeetCode108_Convert SortedArray to BinarySearchTree(将有序数组转成二叉排序树) Java题解
- 【LeetCode-面试算法经典-Java实现】【108-Convert Sorted Array to Binary Search Tree(排序数组转变为平衡二叉树)】
- [LeetCode]Convert Sorted Array to Binary Search Tree 将有序数组转换成BST
- lintcode convert-sorted-array-to-binary-search-tree-with-minimal-height 把排序数组转换为高度最小的二叉搜索树
- [LeetCode] Convert Sorted Array to Binary Search Tree 将有序数组转为二叉搜索树
- [LeetCode]108. Convert Sorted Array to Binary Search Tree(升序数组转化为平衡二叉树)
- Leetcode 108 Convert Sorted Array to Binary Search Tree 将一个有序数组变成BST