![](https://img-blog.csdnimg.cn/20201014180756928.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
二叉树
文章平均质量分 77
bertzhang
这个作者很懒,什么都没留下…
展开
-
编程练习-二叉树(求二叉树的高度)
题目:求二叉树的高度 解法: 1、递归调用时将当前高度和已经取得的最大高度作为遍历时的context传入,遍历的过程中不断更新这两个context,最后输出遍历过程中获得的最大高度 2、二叉树的高度是其左子树或右子树中较高的一个子树的高度再加1,由此获得二叉树的高度 程序如下: #include #include template class BinaryTree { priv原创 2012-01-29 18:28:50 · 6514 阅读 · 0 评论 -
编程练习-二叉树(二叉树转双向链表)
1.把二元查找树转变成排序的双向链表 **** 题目: 输入一棵二元查找树,将该二元查找树转换成一个排序的双向链表。 要求不能创建任何新的结点,只调整指针的指向。 10 / / 6 14 / / / / 4 8 12 16 转换成双向链表 4=6=8=10=12=14=16。 首先我们定义的二元查找树 节点的数据结构如下: struct B原创 2012-01-17 09:47:04 · 1032 阅读 · 0 评论 -
二叉树两个结点的最低共同父结点
需要思考为什么采用Inorder遍历是可以的?其他遍历方式结果不正确? #include template class TreeNode { public: TreeNode() :left_(NULL), right_(NULL) {} T value_; TreeNode* left_; TreeNode* right_; }; template class VisitC原创 2012-02-06 14:42:36 · 732 阅读 · 0 评论 -
求二叉树节点的最大距离
有两种情况,要么是树的深度(例如链表的情况),要么是两个子树的深度和加2。最终的结果要么来自某个子树的最大距离,要么来自两个子树的深度和加2。 具体程序如下: #include template class TreeNode { public: TreeNode() : left_(NULL), right_(NULL) { } TreeNode(const T& value) :原创 2012-02-07 15:33:14 · 1642 阅读 · 0 评论 -
把一个有序整数数组放到二叉树中
对于有序数组,取中间节点作为根节点,将数组分成两部分,对数组的两部分递归构建左右子树 #include #include #include template class TreeNode { public: TreeNode() : left_(NULL), right_(NULL) {} T value_; TreeNode* left_; TreeNode* righ原创 2012-02-07 17:23:30 · 3875 阅读 · 1 评论 -
二叉树的非递归遍历
理解好这个问题,对于递归的理解和递归转非递归的方法都有很好的益处。 #include #include template class TreeNode { public: TreeNode() : left_(NULL), right_(NULL) {} T value_; TreeNode* left_; TreeNode* right_; }; template voi原创 2012-02-07 14:20:07 · 573 阅读 · 0 评论 -
重建二叉树
题目:给定二叉树的先序和中序遍历,构建这个二叉树。例如:先序遍历结果是:abdcef,中序遍历的结果是:dbaecf,如何构建二叉树 分析:先序遍历的结果中的每一个节点,将中序遍历的结果分为左右子树两部分,递归构建二叉树,就可以完成树得构建。 程序如下: #include #include class TreeNode { public: TreeNode() : left_(NU原创 2012-02-21 18:52:05 · 3113 阅读 · 1 评论 -
编程练习-二叉树(父节点、非递归、O(0)空间)
1、一个有父节点的二叉树,不用递归和堆栈,遍历二叉树 思路是这样的,如果采用先序遍历的方法,首先遍历根节点,然后沿左子树下降,直到遍历到最左节点,此时返回最左节点的父节点,如果父节点的右子树非空,采用相同的方式遍历右子树,如果右子树已经比遍历完毕(通过parent->right == current来判断),那么向上回溯,如果当前节点一直来自于右子树,那么继续回溯,直到根节点或者节点不是右子树为原创 2012-01-16 17:36:13 · 891 阅读 · 0 评论 -
分层遍历二叉树
题目:对于一个给定的二叉树,分层遍历二叉树,分为上下左右,不同方向进行遍历。 解析:原来实现时考虑使用队列来做,但这个算法不方便使用递归来做,如果使用递归会造成诸多问题。因此可以使用循环来处理,编程之美中不使用队列而是用数组模拟队列,对于从下上输出很有帮助,具体描述如下: 1)对于从右向左输出,开始考虑使用栈来颠倒,实际发现其实只要处理左右子树的顺序改变一下就可以了; 2)对于从下向上遍历,原创 2012-02-21 20:21:21 · 969 阅读 · 0 评论