空间和时间复杂度不好估计,当然求一个最优思路。
分享一个递归算法:
template<class T>class BinaryTree{struct Node{T data;Node * left, * right;} * root;public:void add(const T & value);void combine(Node * r);};
template<class T>void BinaryTree<T>::combine(Node * r){if(r == 0)return;if(r->left != 0)combine(r->left);if(r->right != 0)combine(r->right);add(r->data);}
分三步:1.将二叉树转换成已序链表。2.将两个已序链表合并成一个链表。3.将合并后的链表再次转换成二叉查找树。
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
暂无简介
文章 0 评论 0
接受
发布评论
评论(2)
分享一个递归算法:
template<class T>
class BinaryTree
{
struct Node
{
T data;
Node * left, * right;
} * root;
public:
void add(const T & value);
void combine(Node * r);
};
template<class T>
void BinaryTree<T>::combine(Node * r)
{
if(r == 0)return;
if(r->left != 0)combine(r->left);
if(r->right != 0)combine(r->right);
add(r->data);
}
分三步:
1.将二叉树转换成已序链表。
2.将两个已序链表合并成一个链表。
3.将合并后的链表再次转换成二叉查找树。