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