
二叉树
文章平均质量分 66
ptrsnow
这个作者很懒,什么都没留下…
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
【二叉树7】递归计算二叉树中节点数目
【问题1】计算二叉树中叶子节点的数目int countLeafNodes(BTreeNode *root) { if (root == NULL) return 0; if (root->leftchild == NULL && root->rightchild == NULL) return 1; return countLeafNod原创 2013-09-09 16:00:55 · 1184 阅读 · 0 评论 -
【二叉树13】将有序链表编程一颗BST
【问题】给你一个链表的头结点head,该链表元素递增排序,将这个链表转化为一个二叉搜索树,并返回树的根节点【code】 int linkLength(ListNode *head) { int length = 0; while (head != NULL){ head = head->next; l原创 2013-09-13 17:26:21 · 824 阅读 · 0 评论 -
【二叉树3】判断二叉树和为某一值的路径
【问题描述】在一个int型二叉树中,找到和为某一值的所有路径,路径的定义为根节点到叶子节点【举例】【代码】用一个数组path来记录路径,每经过一个节点就从sum中减去该结点的值,并在path中记录,直到到达叶子节点,查看sum是否被减到了0,如果为0则满足条件int printSP(treeNode *root,int sum,int path[],int top){ if(root原创 2013-03-26 15:58:40 · 591 阅读 · 0 评论 -
【二叉树2】逐层遍历一棵二叉树
【问题描述】对【二叉树1】中建立的二叉树逐层打印,也就是说第一行打印第0层根节点,第二行打印第一层……如此类推。【举例】一棵二叉树如下:打印结果为:【代码】编程之美介绍了两种实现,一种是递归,另一种就是如下方法,用两个游标记录树的每一层。代码仅为为该函数的实现,和所需头文件。并且不包含二叉树节点的定义以及main函数的调用#include #inclu原创 2013-03-26 11:40:51 · 875 阅读 · 0 评论 -
【二叉树5】前中后遍历二叉树的递归和非递归方法
http://www.cnblogs.com/dolphin0520/archive/2011/08/25/2153720.html原创 2013-09-09 12:15:23 · 653 阅读 · 0 评论 -
【二叉树12】求一颗二叉树中两个节点的最近公共父节点
【问题】lowest common ancentor【举例】8和5的公共父节点为3【code】Node *LCA(Node *root, Node *p, Node *q) { if (!root) return NULL; if (root == p || root == q) return root; Node *L = LCA(root->left, p,原创 2013-09-12 14:56:34 · 705 阅读 · 0 评论 -
【二叉树11】判断一颗二叉树本身是否为镜像
【问题】如题目output : trueoutput : false【code】bool isSymmetricHelper(TreeNode *rnode, TreeNode *lnode) { if ((lnode || rnode) == NULL) return true; if ((lnode && rnod原创 2013-09-11 11:59:07 · 923 阅读 · 0 评论 -
【二叉树10】求一颗二叉树的最小深度
【问题】如题目【code】int minDepthHelper(TreeNode *root, int curDepth, int &minDepth) { if (root->left == NULL && root->right == NULL) { minDepth = minDepth < curDepth ? minDepth : curDep原创 2013-09-11 10:33:06 · 1126 阅读 · 0 评论 -
【二叉树4】比较两个二叉树的结构是否相同
【问题】给两棵二叉树的根节点,判断他们的结构是否相同。bool IsSameStruct(treeNode *node1,treeNode *node2){ if (node1 || node2 == NULL) return ture; else if(node1 && node2 == NULL) return false; else return IsSameStruc原创 2013-08-17 17:27:19 · 868 阅读 · 0 评论 -
【二叉树9】二叉树中任意两个节点的最大路径和
【问题】注意任意两个节点,不是只叶子到叶子,或者是跟到叶子。特殊考虑节点值为负数的情况。【code】在leetcode上的第一道题,bug了三次才通过。函数maxNode返回节点的最大值,作为sum的初始值。函数maxHandSum返回讲当前节点当做根节点,得到的最大和,特别注意最后一个if语句,对具有负贡献的子树进行剪枝。有以下几点要注意的:1、单独一个节点的树-3,没过原创 2013-09-09 22:35:00 · 1243 阅读 · 2 评论 -
【二叉树6】寻找二叉树中任意节点最远的距离
【问题】距离定义为两个节点中间的节点数目,也就是从一个节点到另一个节点所经过的节点数目(包括自身)。对与一个节点而言有三种情况可以考虑:1、左子树的高+右子树的高+1得到经过当前节点的最大path2、左子树为根节点得到的最大path3、右子树为根节点得到的最大path求max(1,2,3)【代码】int findMaxPath(BTreeNode *root, in原创 2013-09-09 15:43:57 · 1044 阅读 · 0 评论 -
【二叉树8】判断一颗树是否是平衡二叉树
【问题】提供一颗二叉树,判断是否为平和二叉树【代码】GetDepth()用来获取一个节点的深度,当一个节点的左右孩子的深度之差不超过1,就认为这是个平衡二叉树int GetDepth(BTreeNode* root) { if(root == NULL) return 0; int leftDepth = GetDepth(root->leftchild);原创 2013-09-09 17:44:35 · 802 阅读 · 0 评论 -
【二叉树1】根据前序和中序遍历建立一棵二叉树
【问题描述】已知两个序列,分别表示二叉树前序遍历和中序遍历的结果,根据他们建立一个二叉树,注意处理两个序列不合法的情况。【举例】如果输入为:char preOrder[]={'a','b','d','e','c','f','g'};char inOrder[]={'d','b','e','a','f','c','g'};输出这样一棵树:【代码】#includ原创 2013-03-26 10:05:18 · 1493 阅读 · 0 评论