二叉树
文章平均质量分 69
娃哈哈纯净李
这个作者很懒,什么都没留下…
展开
-
shared_ptr在二叉树中的应用
shared_ptr能够不用显式调用delete来释放new出来的空间,尤其是在具有复杂的数据结构时,不用考虑应该如何释放开辟的空间,例如在二叉树中,如果不利用shared_prt,则需要在析构函数中递归调用delete来释放开辟的空间。函数如下所示: void remove(BinNode *root) { if(root==NULL) return ; remove(root->lC原创 2014-12-01 21:37:29 · 1029 阅读 · 0 评论 -
二叉树(类模板、函数模板、函数对象、函数指针)
这个二叉树的代码只是简单的实现了一些功能,比如插入和遍历。关键是用到了函数指针和函数对象,还有shared_ptr。 其中shared_ptr一定定义在节点中,因为new出来的空间时节点,释放的时候是释放节点。 在函数模板中用到函数对象时,如果要传递的是函数指针则必须把函数名和要用的参数T传入,不能只传入函数名,注意这和调用函数模板是不一样。如果传递的是函数对象,需要向构造一个类,重载(),然原创 2014-12-04 10:08:09 · 757 阅读 · 0 评论 -
重建二叉树
《编程之美》第3.9节:重建二叉树 问题:已知二叉树的先序和中序遍历,重构二叉树 解法:通过先序遍历,不断抽取子树的根节点进行重构。 代码: #include using namespace std; struct Node { Node *left; Node *right; char value; Node(char v,Node *l=nullptr,Node *r=nul原创 2015-01-11 21:44:11 · 376 阅读 · 0 评论 -
分层遍历二叉树
《编程之美》第3.10节:分层遍历二叉树 问题:把二叉树进行层次遍历,或者可以选择遍历第几层 解法:用队列来做,进行先进先出 代码: #include #include using namespace std; struct Node { Node *left; Node *right; char value; Node(char v,Node *l=nullptr,Node *原创 2015-01-11 22:32:27 · 486 阅读 · 0 评论 -
求二叉树中节点的最大距离
《编程之美》第3.8节:求二叉树中的最大距离 问题:如果我们把二叉树看成一个图,父子节点之间的连线看成是双向的,我们定义距离为两个节点之间的边数,求一棵二叉树中县局最远的两个节点之间的距离。 解法:树的后序遍历,然后再每个节点中维护两个变量nMaxLeft,nMaxRight保存当前节点为根节点的子树中的最远距离,不断更新maxLength,直到根节点。 代码: #include usin原创 2015-01-11 21:04:01 · 530 阅读 · 0 评论