树
文章平均质量分 70
wnjason
这个作者很懒,什么都没留下…
展开
-
LeetCode---Populating Next Right Pointers in Each Node
题目大意:给出一个二叉树,使得二叉树中每个节点都有一个指针指向其右边的节点。如果节点不存在右边的节点则指针为空。算法思想:1.判断根节点是否为空,不空则将更节点和其层号放入队列。2.当队列不空时,取队头元素cp的并将其移出队列,再取队列一个元素temp.3.判断temp所记录的节点是否为空且该节点的层号是否和cp的层号相同,如果相同cp的右边节点为temp,否则cp的右边节点为原创 2015-09-25 16:48:25 · 260 阅读 · 0 评论 -
LeetCode---Construct Binary Tree from Inorder and Postorder Traversal
题目大意:给出二叉树的中序和后序遍历结果,构造出该二叉树。算法思想:1.整体思想同由前序和后序构造二叉树不的差不过。LeetCode---Convert Sorted Array to Binary Search Tree2.根节点的位置由前序的第一个变为后序的最后一个,只需要重新计算左右子树的区间。代码如下:/** * Definition for a binary tre原创 2015-10-30 14:10:44 · 353 阅读 · 0 评论 -
LeetCode---Construct Binary Tree from Preorder and Inorder Traversal
题目大意:给出二叉树的前序遍历结果和中序遍历结果,根据这两种遍历结果构造二叉树。算法思想:1.根据前序遍历的特点,前序遍历结果的首节点是二叉树的根节点。创建该节点。2.找出根节点在中序遍历的位置。由中序遍历的特点可知,根节点将中序遍历的结果分为两部分,左部分为二叉树的左子树节点,右部分为二叉树的右子树节点。3.计算出左子树包含的节点个数。4.递归调用构造出二叉树的左右子树。原创 2015-10-30 13:32:06 · 365 阅读 · 0 评论 -
LeetCode---Path Sum II
题目大意:给出一个二叉树和一个从根节点到叶子节点的路径和,找出二叉树中所有满足要求的路径。算法思想:先序遍历整个二叉树,遍历的同时记录下当前所遍历过的节点,及当前路径和,当遍历到根节点时判断路径和是否满足要求,若不满足,则从路径节点中移除该节点同时路径和也相应的减少,如果满足要求则记录下当前路径,同时设置回溯标记以便来记录下一条满足要求的路径,按照此过程直到整个二叉树遍历结束。说明:1原创 2015-11-02 14:08:19 · 323 阅读 · 0 评论 -
LeetCode---Binary Tree Paths
题目大意:给出一颗二叉树,返回所有从根节点到叶子节点的路径。算法思想:先序遍历该二叉树,在遍历的过程中记录下访问过的节点,如果当前节点没有孩子节点则说明产生一条遍历结果,将其放入遍历结果集中,设置回溯标记以便于寻找下一条遍历路径。如果有孩子节点则将其孩子节点压入栈中继续遍历 ,重复此过程直至遍历结束。说明:(1).遍历过程中节点中存放的整形值,要将其转化为字符串,这里用的是sprint原创 2015-11-02 18:18:30 · 399 阅读 · 0 评论 -
LeetCode---Kth Smallest Element in a BST
题目大意:给出一颗二叉搜索树,找出其中第K小的数。算法思想:由二叉搜索树和中序遍历的性质可知,中序遍历二叉搜索树的结果是从小到大递增的序列,从而只需找到中序遍历的过程中的第K个节点即可。中序遍历算法:对于任意节点P,只要P不空则将其入栈,并指向其左孩子节点,直至P为空,然后取栈顶顶元素并出栈,然后对其右子树做上述同样的操作。按此过程重复直到栈为空为止。代码如下:/** *原创 2015-11-03 10:41:52 · 334 阅读 · 0 评论 -
LeetCode---Sum Root to Leaf Numbers
题目大意:给出一个二叉树,二叉树中每个从根节点到叶子节点的路径表示一个整数,其中路径中的每个节点值表示整数的一个数位,将这些所有整数求和并返回。算法思想:1.整体算法思想如同LeetCode---Binary Tree Paths2.只需将每条路径表示的字符串转化为数字,然后将这些数字加起来。代码如下:/** * Definition for a binary tree no原创 2015-11-02 18:59:02 · 309 阅读 · 0 评论 -
LeetCode---Flatten Binary Tree to Linked List
题目大意:给出一个二叉树,将其转化为单链表形式。算法思想:先序遍历二叉树,遇到节点将其放入链表中即可。1.设置一个节点指针指向根节点。2.将根节点入栈。3.然后取栈顶元素,并出栈。将其孩子节点入栈(需先放入右孩子节点)。若当前节点不为根节点则将其加入链表,同时移动链表指针。重复此过程直至栈空。代码如下:/** * Definition for a binary tre原创 2015-11-02 19:43:45 · 329 阅读 · 0 评论 -
LeetCode---Lowest Common Ancestor of a Binary Tree
题目大意:给出一个二叉树和书中任意两个节点,要求找出它们的公共节点。算法思想:先序遍历该二叉树,在遍历的过程中记录下找到p,q节点的路径,然后比较中这两条路径找到它们路径中最后一个公共节点。先序遍历的算法参考:先序遍历非递归实现代码如下:/** * Definition for a binary tree node. * struct TreeNode { * i原创 2015-11-03 14:08:19 · 285 阅读 · 0 评论 -
LeetCode---Convert Sorted Array to Binary Search Tree
题目大意:给出一个排序的数组,将其转化为高度平衡的二叉树。算法思想:1.将数组分成3部分,中间位置是二叉树的根节点,左半部分则是二叉树的左子树,右半部分则是二叉树的右子树。2.递归转化数组为二叉树。代码如下:/** * Definition for a binary tree node. * struct TreeNode { * int val; *原创 2015-10-29 15:33:08 · 334 阅读 · 0 评论 -
LeetCode---Binary Tree Postorder Traversal
题目大意:给出一个二叉树,按照后序遍历该二叉树,返回遍历结果。算法思想:1.判断树是否为空,若为空直接返回空向量。2.设置一个栈,和两个树节点,分别记录当前节点和前驱节点。3.取栈顶。对于当前节点进行判断,是否满足以下两个条件之一1.该节点不存在孩子节点2.前驱节点为该节点的孩子节点。则说明该节点的孩子节点都访问过了,则可以直接访问节点,并将节点出栈。反之将该节点的左右孩子节点入栈原创 2015-10-29 20:09:07 · 313 阅读 · 0 评论 -
LeetCode---Binary Tree Right Side View
题目大意:给出一个二叉树,假设你站在二叉树的右边,输出你能看得到的节点。算法思想按层序遍历二叉树,输出每层中最右边的节点即可。代码如下:/** * Definition for a binary tree node. * struct TreeNode { * int val; * TreeNode *left; * TreeNode *right原创 2015-10-28 19:41:00 · 383 阅读 · 0 评论 -
LeetCode---Validate Binary Search Tree
题目大意:给出一颗二叉树,判断其是否是一颗有效的二叉搜索树。算法思想:二叉搜索树的性质:1.左子树的节点值都小于根节点的节点值。2右子树的节点值都大于根节点的节点值3.左右子树又都是二叉搜索树。4.中序遍历二搜索树,遍历结果为单调递增的序列。利用第四条性质来判断是否是二叉搜索树即可。这里用一个容器存储中序遍历二叉树的结果,当容器不空且最后一个元素大于将要放入的元素时原创 2015-11-03 17:35:45 · 382 阅读 · 0 评论 -
LeetCode---Symmetric Tree
题目大意:给出一个二叉树,判断该树是否关于根节点是中心对称的。算法思想:如果一个二叉树是中心对称的,则说明其左右子树对称,由二叉树的性质可知通过前序遍历结果和后序遍历结果可以确定一个二叉树的结构。这样对于对称二叉树,通过将先左子树进行正常的先序和后序遍历,对右子树也进行先序和后序遍历,但注意需要改变一下遍历其左右子树的顺序。无论是先序还是后序左右子树的遍历结果应该相同。如果不相同则不是中心原创 2015-11-03 16:52:47 · 359 阅读 · 0 评论 -
LeetCode---Recover Binary Search Tree
题目大意:给出一个交换了两个节点值的二叉搜索树,将其还原成正常的二叉搜索树。算法思想:可知,二叉搜索树进行中序遍历的结果为单调递增序列。中序遍历二叉搜索树,将其遍历序列记录下来,对结果序列进行排序形成单调递增序列,然后再次经行中序遍历,遍历过程中将遍历的节点值和上述结果比较若不同则该节点值是被交换的,则将其修改为正常的值,知道遍历结束。代码如下:/** * Definitio原创 2015-11-04 14:59:03 · 360 阅读 · 0 评论 -
LeetCode---Lowest Common Ancestor of a Binary Search Tree
题目大意:给出一个二叉搜索树,和两个树中节点。找出这两个节点的最低公共祖先。算法思想:遍历二叉搜索树,将两个节点和当前节点比较如果都小于当前节点,则指针指向左孩子节点;如果都大于当前节点,则指针指向右孩子节点。否则说明当前节点即为两节点的最低公共祖先节点。代码如下:/** * Definition for a binary tree node. * struct TreeNod原创 2015-10-13 14:54:21 · 260 阅读 · 0 评论 -
LeetCode---Binary Tree Level Order Traversal II
题目大意:给出一个二叉树,从底向上层序遍历二叉树。算法思想:1.整体思想如LeetCode---Binary Tree Level Order Traversal2.将结果逆序即可。代码如下:/** * Definition for a binary tree node. * struct TreeNode { * int val; * TreeNode原创 2015-10-28 14:04:28 · 263 阅读 · 0 评论 -
LeetCode---Minimum Depth of Binary Tree
题目大意:给出一颗二叉树,求出该二叉树的最小深度。最小深度为从根节点到离它最近的叶子节点的路径上的节点数。算法思想:1.借助队列,层序遍历该二叉树,为每个节点编上节点深度。2.只需找出从队列中最先发现的叶子节点即可,返回它的节点深度。代码如下:/** * Definition for a binary tree node. * struct TreeNode { *原创 2015-10-28 15:57:12 · 284 阅读 · 0 评论 -
LeetCode---Binary Tree Zigzag Level Order Traversal
题目大意:给出一个二叉树,按照锯齿形层序遍历二叉树。最后将结果缓存在二维向量中。算法思想:1.整体思想如LeetCode---Binary Tree Level Order Traversal2.只需将基数层号的缓冲向量逆序即可。代码如下:/** * Definition for a binary tree node. * struct TreeNode { *原创 2015-10-28 14:51:32 · 252 阅读 · 0 评论 -
LeetCode---Binary Tree Level Order Traversal
题目大意:给出一个二叉树,对其进行程序遍历,将结果存储在二维向量中。算法思想:1.首先判断二叉树是否为空,若为空直接返回空向量。2.将根节点如队列,且层号为0.3.若队列不空则一直遍历队列。取队首,出队列,判断队首元素与当前层号标记是否相同,如果相同则将其放入缓冲向量中。如果不同,则将其缓冲向量放入结果向量中,并将缓冲向量清空,将队首元素放入缓冲向量,并更新层号标记。将左右子树如队原创 2015-10-28 12:33:20 · 277 阅读 · 0 评论 -
LeetCode---Balanced Binary Tree
题目大意:给出一个二叉树判断其是否是平衡二叉树。算法思想:由平衡二叉树的性质可知,其左右子树的深度之差是小于等于1的,而其左右子树有分别是平衡二叉树。则 若果一个树为空,那么它一定是平衡二叉树,若不为空 分别计算出其左右子树的深度,判断其深度之差是否小于等于1,如果不满足则不是平衡二叉树,若满足则继续递归判断其左右子树是否是平衡二叉树。代码如下:/** * Definiti原创 2015-11-04 11:33:54 · 340 阅读 · 0 评论