给出TREE_INSERT过程的非递归版本(算法导论第三版12.3-1)
给出TREE_INSERT过程的非递归版本(算法导论第三版12.3-1)
template<typename T>
void insert_recursive(BinaryTree<T>& tree,BinaryTreeNode<T>* root, BinaryTreeNode<T>* node)
{if(tree.root == nullptr){tree.root = node;return;}if(root == nullptr){root = tree.root;}if(node->key < root->key){if(root->left == nullptr){root->left = node;if(node!= nullptr)node->parent = root;}elseinsert_recursive(tree,root->left,node);}else{if(root->right == nullptr){root->right = node;if(node!= nullptr)node->parent = root;}elseinsert_recursive(tree,root->right,node);}
}
测试代码
void inorder_tree_walk(BinaryTreeNode<T> * node)
{if(node!= nullptr){inorder_tree_walk(node->left);std::cout<<node->key<<" ";inorder_tree_walk(node->right);}
}
BinaryTreeNode<int>* nodes[] = {new BinaryTreeNode<int>(15),new BinaryTreeNode<int>(6),new BinaryTreeNode<int>(18),new BinaryTreeNode<int>(3),new BinaryTreeNode<int>(7),new BinaryTreeNode<int>(17),new BinaryTreeNode<int>(20),new BinaryTreeNode<int>(2),new BinaryTreeNode<int>(4),new BinaryTreeNode<int>(13),new BinaryTreeNode<int>(9),};BinaryTree<int> binaryTree;for (auto i :nodes) {insert_recursive<int>(binaryTree, nullptr,i);}inorder_tree_walk(binaryTree.root);cout<<endl;
辅助类
BinaryTree
template<typename T>
class BinaryTree{public:BinaryTreeNode<T>* root;BinaryTree(){root = nullptr;}
};
BinaryTreeNode链接地址
给出TREE_INSERT过程的非递归版本(算法导论第三版12.3-1)相关推荐
- 二叉树的中序遍历非递归方法(算法导论第三版12.1-3)
二叉树的中序遍历非递归方法(算法导论第三版12.1-3) 1⃣️用栈实现 template<typename T> void inorder_tree_walk_non_recursion ...
- 写出TREE-MINIMUM 和TREE-MAXIMUM的递归版本(算法导论第三版12.2-2)
写出TREE-MINIMUM 和TREE-MAXIMUM的递归版本(算法导论第三版12.2-2) template<typename T> BinaryTreeNode<T>* ...
- 写出TREE-PREDECESSOR的伪代码(算法导论第三版12.2-3)
写出TREE-PREDECESSOR的伪代码(算法导论第三版12.2-3) TREE-PREDECESSOR(x)if x.left != NILreturn TREE-MAXIMUM(x.left) ...
- 给定一个n节点二叉树,写出一个O(n)时间的非递归的过程,将该树每个结点的关键字输出(算法导论第三版第十章10.4-5)
给定一个n节点二叉树,写出一个O(n)时间的非递归的过程,将该树每个结点的关键字输出.要求除该树本树的存储空间外只能使用固定量的额外存储空间,且过程中不得修改该树,即使是暂时的修改也不允许. (算法导 ...
- 非递归遍历二叉树(算法导论第三版第十章10.4-5)
非递归遍历二叉树(算法导论第三版第十章10.4-5) template<typename T> void TraverseBinaryTreeNonRecursive(BinaryTree ...
- 找出有序数组X和Y中所有元素的中位数(X,Y分别含n个元素)(算法导论第三版9.3-8)
找出有序数组X和Y中所有元素的中位数(X,Y分别含n个元素) (算法导论第三版9.3-8) 时间复杂度O(lgn) int find_median_two_ordered_arrays(int *ar ...
- 找出第i个小元素(算法导论第三版9.2-4题)
找出第i个小元素(算法导论第三版9.2-4题) 期望时间复杂度:Θ(n) 最坏情况的时间复杂度Θ(n^2) int randomized_select_based_loop(int *array,in ...
- 找出最大值和最小值(算法导论第三版9.1-2)
找出最大值和最小值 (算法导论第三版9.1-2) 在最坏的情况下,比较次数下界是⌈3n/2⌉−2 void find_maximum_and_minimum_element(int *array,in ...
- 找出第二小元素(算法导论第三版9.1-1题)
找出第二小元素(算法导论第三版9.1-1题) 时间复杂度Θ(n) 比较次数n+⌈lgn⌉−2次 思路:将元素每次分成2部分,第一部分和第二部分元素成对比较.最终获得最小的元素,记录那些和最小元素比较后 ...
最新文章
- .NET笔试题集(五)
- winform配置文件的简单使用(转载)
- J2EE从servlet开始
- 【直播回放】100分钟全面剖析图像分割任务,学习CV必知
- Hadoop集群搭建(27)
- 审计参数 audit_trail
- 省二计算机二级vb程序设计题,江苏省计算机二级考试VB程序设计复习题(分类汇总)...
- access2003安装包百度云_阿里云服务器安装JDK与配置环境详细步骤
- gram矩阵_推荐算法三视角:矩阵,图,时间线
- ui自动化测试测试报告_您需要了解的有关UI测试的所有信息
- 动态规划求解疯狂的采药问题(洛谷P1616题题解,Java语言描述)
- 那两个告扎克伯格抄袭的斜杠青年,后来怎么样了?
- 个人简历小程序前端源码
- 容器编排技术 -- 使用Minikube在Kubernetes中运行应用
- POJ 3050 Hopscotch
- android 日期下拉选择控件,Android 中日期控件与下拉列表的使用
- 安装ssd后不识别网卡_群晖E10M20-T1:你以为它是张网卡,其实它还带俩SSD
- 《31天成为IT服务达人》之技能篇中的磁带库
- java文件恢复软件,误删文件恢复-误删文件恢复大师 v1.1.0 最新版
- python flask web_Python Web开发之Flask