编程算法 - 数组构造二叉树并打印
来源:互联网 发布:你好我是淘宝客服 编辑:程序博客网 时间:2024/05/16 16:18
数组构造二叉树并打印
本文地址: http://blog.csdn.net/caroline_wendy
数组:
构造二叉树, 需要使用两个队列(queue), 保存子节点和父节点, 并进行交换;
打印二叉树, 需要使用两个队列(queue), 依次打印父节点和子节点, 并进行交换;
二叉树的数据结构:
struct BinaryTreeNode {int m_nValue;BinaryTreeNode* m_pParent;BinaryTreeNode* m_pLeft;BinaryTreeNode* m_pRight;};
代码:
/* * main.cpp * * Created on: 2014.6.12 * Author: Spike *//*eclipse cdt, gcc 4.8.1*/#include <iostream>#include <stack>#include <queue>using namespace std;struct BinaryTreeNode {int m_nValue;BinaryTreeNode* m_pParent;BinaryTreeNode* m_pLeft;BinaryTreeNode* m_pRight;};void printTree (BinaryTreeNode* tree){BinaryTreeNode* node = tree;std::queue<BinaryTreeNode*> temp1;std::queue<BinaryTreeNode*> temp2;temp1.push(node);while (!temp1.empty()){node = temp1.front();if (node->m_pLeft != NULL) {temp2.push(node->m_pLeft);}if (node->m_pRight != NULL) {temp2.push(node->m_pRight);}temp1.pop();std::cout << node->m_nValue << " ";if (temp1.empty()){std::cout << std::endl;temp1 = temp2;std::queue<BinaryTreeNode*> empty;std::swap(temp2, empty);}}}BinaryTreeNode* buildTree (const std::vector<int>& L){if (L.empty()) return nullptr;std::queue<BinaryTreeNode*> parentQueue;std::queue<BinaryTreeNode*> childQueue;BinaryTreeNode* root = new BinaryTreeNode();root->m_nValue = L[0];parentQueue.push(root);std::size_t times = 1;while (times < L.size()){BinaryTreeNode* parent = parentQueue.front();parentQueue.pop();BinaryTreeNode* lchild = new BinaryTreeNode();lchild->m_nValue = L[times];lchild->m_pLeft = nullptr;lchild->m_pRight = nullptr;++times;parent->m_pLeft = lchild;lchild->m_pParent = parent;childQueue.push(lchild);if (times == L.size()) break;BinaryTreeNode* rchild = new BinaryTreeNode();rchild->m_nValue = L[times];rchild->m_pLeft = nullptr;rchild->m_pRight = nullptr;++times;parent->m_pRight = rchild;rchild->m_pParent = parent;childQueue.push(rchild);if (parentQueue.empty()) {parentQueue = childQueue;std::queue<BinaryTreeNode*> empty;std::swap(childQueue, empty);}}return root;}int main (void){std::vector<int> L = {49, 38, 65, 97, 76, 13, 27, 49};BinaryTreeNode* tree = buildTree(L);printTree(tree);return 0;}
输出:
49 38 65 97 76 13 27 49
不包含父节点的树:
/* * main.cpp * * Created on: 2014.6.12 * Author: Spike *//*eclipse cdt, gcc 4.8.1*/#include <iostream>#include <stack>#include <queue>using namespace std;struct BinaryTreeNode {int m_nValue;BinaryTreeNode* m_pLeft;BinaryTreeNode* m_pRight;};void printTree (BinaryTreeNode* tree){BinaryTreeNode* node = tree;std::queue<BinaryTreeNode*> temp1;std::queue<BinaryTreeNode*> temp2;temp1.push(node);while (!temp1.empty()){node = temp1.front();if (node->m_pLeft != NULL) {temp2.push(node->m_pLeft);}if (node->m_pRight != NULL) {temp2.push(node->m_pRight);}temp1.pop();std::cout << node->m_nValue << " ";if (temp1.empty()){std::cout << std::endl;temp1 = temp2;std::queue<BinaryTreeNode*> empty;std::swap(temp2, empty);}}}BinaryTreeNode* buildTree (const std::vector<int>& L){if (L.empty()) return nullptr;std::queue<BinaryTreeNode*> parentQueue;std::queue<BinaryTreeNode*> childQueue;BinaryTreeNode* root = new BinaryTreeNode();root->m_nValue = L[0];parentQueue.push(root);std::size_t times = 1;while (times < L.size()){BinaryTreeNode* parent = parentQueue.front();parentQueue.pop();BinaryTreeNode* lchild = new BinaryTreeNode();lchild->m_nValue = L[times];lchild->m_pLeft = nullptr;lchild->m_pRight = nullptr;++times;parent->m_pLeft = lchild;childQueue.push(lchild);if (times == L.size()) break;BinaryTreeNode* rchild = new BinaryTreeNode();rchild->m_nValue = L[times];rchild->m_pLeft = nullptr;rchild->m_pRight = nullptr;++times;parent->m_pRight = rchild;childQueue.push(rchild);if (parentQueue.empty()) {parentQueue = childQueue;std::queue<BinaryTreeNode*> empty;std::swap(childQueue, empty);}}return root;}int main (void){std::vector<int> L = {49, 38, 65, 97, 76, 13, 27, 49};BinaryTreeNode* tree = buildTree(L);printTree(tree);return 0;}
输出:
49 38 65 97 76 13 27 49
5 0
- 编程算法 - 数组构造二叉树并打印
- 先序构造二叉树并打印(2)
- 构造二叉树并输出
- 算法题:二叉树打印
- 构造二叉树编程小结
- 按照层次遍历并打印二叉树
- 【难】【二叉树】构造数组的MaxTree
- 从数组构造二叉树代码
- 二叉树和数组的构造转换
- c语言构造数组二叉树
- 用数组构造一个二叉树
- 构造数组的MaxTree(二叉树)
- 在线编程--层次打印二叉树
- 一天一算法:day01二叉树打印
- 【算法题】之字打印二叉树
- 二叉树的java构造算法
- 线索二叉树的构造算法
- 算法题:二叉树的构造
- linux软件中断——tasklet机制
- 力克·胡哲-1
- time,gettimeofday,clock_gettime
- Storm On YARN带来的好处
- 无域名HTTP请求攻击分析
- 编程算法 - 数组构造二叉树并打印
- Implement strStr()
- Ruby 网络资料
- 将string数组转化为sql的in条件用sql查询
- QT连接MySql数据库连接不上
- Storm与MRv1类比--Storm初步印象
- AIDL module
- apkbuilder找不到了!!!
- hdu 4214