二叉树的七种遍历方式以及按行打印
2017-07-22 23:39
357 查看
void preorder_digui(TreeNode* pRoot, vector<int> &preorder_digui_re) { if (pRoot != NULL) { preorder_digui_re.push_back(pRoot->val); if (pRoot->left) preorder_digui(pRoot->left, preorder_digui_re); if (pRoot->right) preorder_digui(pRoot->right, preorder_digui_re); } } void preorder_while(TreeNode* pRoot, vector<int> &preorder_while_re) { stack <TreeNode*>stack1; while (pRoot || !stack1.empty()) { if (pRoot == NULL) { pRoot = stack1.top(); stack1.pop(); } if (pRoot != NULL) { preorder_while_re.push_back(pRoot->val); if (pRoot->right) stack1.push(pRoot->right); pRoot = pRoot->left; } } } void inorder_digui(TreeNode* pRoot, vector<int> &inorder_digui_re) { if (pRoot != NULL) { if (pRoot->left) inorder_digui(pRoot->left, inorder_digui_re); inorder_digui_re.push_back(pRoot->val); if (pRoot->right) inorder_digui(pRoot->right, inorder_digui_re); } } void inorder_while(TreeNode* pRoot, vector<int> &inorder_while_re) { stack<TreeNode*>stack1; while (pRoot || !stack1.empty()) { while (pRoot) { stack1.push(pRoot); pRoot = pRoot->left; } pRoot = stack1.top(); stack1.pop(); inorder_while_re.push_back(pRoot->val); pRoot = pRoot->right; } } void afterorder_digui(TreeNode* pRoot, vector<int> &afterorder_digui_re) { if (pRoot != NULL) { if (pRoot->left) afterorder_digui(pRoot->left, afterorder_digui_re); if (pRoot->right) afterorder_digui(pRoot->right, afterorder_digui_re); afterorder_digui_re.push_back(pRoot->val); } } void afterorder_while(TreeNode* pRoot, vector<int> &afterorder_while_re) { stack <TreeNode*>stack1; stack1.push(pRoot); stack1.push(pRoot); while (!stack1.empty()) { pRoot = stack1.top(); stack1.pop(); if (!stack1.empty() && stack1.top() == pRoot) { if (pRoot->right) { stack1.push(pRoot->right); stack1.push(pRoot->right); } if (pRoot->left) { stack1.push(pRoot->left); stack1.push(pRoot->left); } } else afterorder_while_re.push_back(pRoot->val); } } void kuandu_while(TreeNode *pRoot, vector<int>&kuandu_while_re) { queue<TreeNode*>queue1; queue1.push(pRoot); kuandu_while_re.push_back(pRoot->val); while (!queue1.empty()) { queue<TreeNode*>queue2; while (!queue1.empty()) { pRoot = queue1.front(); queue1.pop(); if (pRoot->left) { kuandu_while_re.push_back(pRoot->left->val); queue2.push(pRoot->left); } if (pRoot->right) { kuandu_while_re.push_back(pRoot->right->val); queue2.push(pRoot->right); } } queue1 = queue2; } } void kuandu_hang(TreeNode *pRoot, vector<vector<int> > &kuandu_hang_re) { queue<TreeNode*>queue1; queue1.push(pRoot); vector<int>re; re.push_back(pRoot->val); kuandu_hang_re.push_back(re); while (!queue1.empty()) { queue<TreeNode*>queue2; vector<int>re; while (!queue1.empty()) { pRoot = queue1.front(); queue1.pop(); if (pRoot->left) { re.push_back(pRoot->left->val); queue2.push(pRoot->left); } if (pRoot->right) { re.push_back(pRoot->right->val); queue2.push(pRoot->right); } } kuandu_hang_re.push_back(re); queue1 = queue2; } }
相关文章推荐
- 二叉树的建立以及三种遍历方式
- 二叉树的遍历以及按层打印
- 二叉树的存储方式以及递归和非递归的三种遍历方式
- 二叉树 的先序 中序、后序遍历、层次遍历以及树状打印等操作
- 二叉树层级遍历并按行打印
- 二叉树的(按行打印)层序遍历,树的高度,判断是否为平衡二叉树
- Java三种遍历方式打印二叉树(递归实现)
- 二叉树创建以及遍历方式
- 二叉树 的先序 中序、后序遍历、层次遍历以及树状打印等操作
- java版的二叉树的先序遍历、中序遍历以及后序遍历(递归以及非递归方式)
- 初识树结构,简单模拟无规律的二叉树,实现二叉树的构建,计算树的深度以及三种遍历方式以及搜索删除,销毁整个树
- python实现二叉树及其七种遍历方式(递归+非递归)
- 二叉树的存储方式以及递归和非递归的三种遍历方式
- 二叉树的存储方式以及递归和非递归的三种遍历方式
- 二叉树的链式存储,先序建树,以及4种遍历方式
- 二叉树创建以及遍历(递归和非递归方式)
- C++编程练习(8)----“二叉树的建立以及二叉树的三种遍历方式“(前序遍历、中序遍历、后续遍历)
- 二叉树系列——二叉树的定义以及各种遍历方式
- 二叉树的遍历以及将二叉树倒置90°打印输入(递归)
- C++编程练习(8)----“二叉树的建立以及二叉树的三种遍历方式“(前序遍历、中序遍历、后续遍历)