
算法-树
sparksnail
这个作者很懒,什么都没留下…
展开
-
LeetCode 124. Binary Tree Maximum Path Sum
题目思路递归遍历,找到左子树和右子树最大的路径,返回加上当前节点的最大路径即可。代码# Definition for a binary tree node.# class TreeNode:# def __init__(self, x):# self.val = x# self.left = None# ...原创 2018-04-06 00:07:44 · 133 阅读 · 0 评论 -
LeetCode 94. Binary Tree Inorder Traversal
题目思路用栈。一直把左节点入栈。代码# Definition for a binary tree node.# class TreeNode(object):# def __init__(self, x):# self.val = x# self.left = None# self.right = N...原创 2018-03-31 01:09:13 · 129 阅读 · 0 评论 -
LeetCode 144. Binary Tree Preorder Traversal
题目思路用栈实现非递归。代码# Definition for a binary tree node.# class TreeNode(object):# def __init__(self, x):# self.val = x# self.left = None# self.right = None...原创 2018-03-31 01:05:23 · 152 阅读 · 0 评论 -
LeetCode 145. Binary Tree Postorder Traversal
题目思路用栈实现。代码# Definition for a binary tree node.# class TreeNode(object):# def __init__(self, x):# self.val = x# self.left = None# self.right = Nonecl...原创 2018-03-31 00:49:35 · 148 阅读 · 0 评论 -
LeetCode 117. Populating Next Right Pointers in Each Node II
思路递归。root的那一层已经连接完,连接左右子节点。连接右子节点的时候,寻找root右边节点的最左节点。代码# Definition for binary tree with next pointer.# class TreeLinkNode:# def __init__(self, x):# self.val = x# ...原创 2018-03-31 00:36:13 · 131 阅读 · 0 评论 -
LeetCode 111. Minimum Depth of Binary Tree
思路递归。 但是要注意,当一个点只有一个子树的情况。代码# Definition for a binary tree node.# class TreeNode(object):# def __init__(self, x):# self.val = x# self.left = None# self....原创 2018-03-30 18:53:23 · 118 阅读 · 0 评论 -
nowcoder 二叉树打印
题目有一棵二叉树,请设计一个算法,按照层次打印这棵二叉树。 给定二叉树的根结点root,请返回打印结果,结果按照每一层一个数组进行储存,所有数组的顺序按照层数从上往下,且每一层的数组内元素按照从左往右排列。保证结点数小于等于500。思路用两个队列,层次遍历。代码# -*- coding:utf-8 -*-# class TreeNode:# def __in...原创 2018-03-05 22:02:37 · 159 阅读 · 0 评论 -
LintCode 106. Convert Sorted List to Balanced BST
题目思路递归构建左子树和右子树代码"""Definition of ListNodeclass ListNode(object): def __init__(self, val, next=None): self.val = val self.next = nextDefinition of TreeNode:clas...原创 2018-02-22 14:41:19 · 179 阅读 · 0 评论 -
LeetCode 112. Path Sum
题目思路递归代码# Definition for a binary tree node.# class TreeNode(object):# def __init__(self, x):# self.val = x# self.left = None# self.right = Noneclass S...原创 2018-03-06 22:03:07 · 181 阅读 · 0 评论 -
LeetCode 111. Minimum Depth of Binary Tree
题目思路返回左子树和右子树最小高度,递归。代码# Definition for a binary tree node.# class TreeNode(object):# def __init__(self, x):# self.val = x# self.left = None# self.right = ...原创 2018-03-06 21:53:31 · 127 阅读 · 0 评论 -
LeetCode 235. Lowest Common Ancestor of a Binary Search Tree
题目思路因为是BST,所以可以判断root和p、q的大小关系。代码# Definition for a binary tree node.# class TreeNode(object):# def __init__(self, x):# self.val = x# self.left = None# s...原创 2018-03-06 21:44:54 · 134 阅读 · 0 评论 -
LeetCode 116. Populating Next Right Pointers in Each Node
题目思路递归,先连接右子树,再连接左子树。代码# Definition for binary tree with next pointer.# class TreeLinkNode:# def __init__(self, x):# self.val = x# self.left = None# self...原创 2018-04-09 00:34:14 · 143 阅读 · 0 评论 -
LeetCode 117. Populating Next Right Pointers in Each Node II
题目思路递归,遍历当前节点的next,找到next最左子节点,把当前节点最右子节点连接到next最左子节点。代码# Definition for binary tree with next pointer.# class TreeLinkNode:# def __init__(self, x):# self.val = x# ...原创 2018-04-09 00:46:21 · 274 阅读 · 0 评论 -
LeetCode 113. Path Sum II
题目思路水题,但是注意Python的list传参的时候,深拷贝和浅拷贝问题。代码# Definition for a binary tree node.# class TreeNode:# def __init__(self, x):# self.val = x# self.left = None# self...原创 2018-04-09 01:28:45 · 259 阅读 · 0 评论 -
LeetCode 129. Sum Root to Leaf Numbers
题目思路递归,计算出所有从根节点到叶子节点的数字,保存起来,最后相加。代码# Definition for a binary tree node.# class TreeNode:# def __init__(self, x):# self.val = x# self.left = None# self....原创 2018-04-03 09:15:29 · 139 阅读 · 0 评论 -
LeetCode 103. Binary Tree Zigzag Level Order Traversal
题目思路层次遍历,记录层数,逆序输出即可。代码# Definition for a binary tree node.# class TreeNode:# def __init__(self, x):# self.val = x# self.left = None# self.right = None...原创 2018-04-10 01:00:59 · 125 阅读 · 0 评论 -
LeetCode 104. Maximum Depth of Binary Tree
题目思路递归,找到左子树和右子树最大高度。代码# Definition for a binary tree node.# class TreeNode:# def __init__(self, x):# self.val = x# self.left = None# self.right = None...原创 2018-04-10 00:46:21 · 133 阅读 · 0 评论 -
LeetCdoe 105. Construct Binary Tree from Preorder and Inorder Traversal
题目思路递归构建左子树和右子树。代码# Definition for a binary tree node.# class TreeNode:# def __init__(self, x):# self.val = x# self.left = None# self.right = Noneclass...原创 2018-04-10 00:42:14 · 128 阅读 · 0 评论 -
LeetCode 106. Construct Binary Tree from Inorder and Postorder Traversal
题目思路递归构建左子树和右子树代码# Definition for a binary tree node.# class TreeNode:# def __init__(self, x):# self.val = x# self.left = None# self.right = Noneclass ...原创 2018-04-10 00:24:47 · 187 阅读 · 0 评论 -
LeetCode 108. Convert Sorted Array to Binary Search Tree
题目思路找到数组中间结点,递归遍历左边和右边。代码# Definition for a binary tree node.# class TreeNode:# def __init__(self, x):# self.val = x# self.left = None# self.right = None...原创 2018-04-10 00:07:52 · 139 阅读 · 0 评论 -
LeetCode 2. Add Two Numbers
题目思路用一个数表示进位。代码# Definition for singly-linked list.# class ListNode:# def __init__(self, x):# self.val = x# self.next = Noneclass Solution: def addTwoNumber...原创 2018-04-15 00:22:41 · 142 阅读 · 0 评论 -
LeetCode 109. Convert Sorted List to Binary Search Tree
题目思路递归,找到链表中间节点,拆分。然后递归组合左子树和右子树。代码# Definition for singly-linked list.# class ListNode:# def __init__(self, x):# self.val = x# self.next = None# Definition for...原创 2018-04-09 01:53:46 · 183 阅读 · 0 评论 -
LeetCode 110. Balanced Binary Tree
题目思路递归遍历左右子树,找到高度。代码# Definition for a binary tree node.# class TreeNode:# def __init__(self, x):# self.val = x# self.left = None# self.right = Nonecla...原创 2018-04-09 01:40:34 · 164 阅读 · 0 评论 -
LeetCode 112. Path Sum
题目思路递归代码# Definition for a binary tree node.# class TreeNode:# def __init__(self, x):# self.val = x# self.left = None# self.right = Noneclass Solution:...原创 2018-04-09 01:33:12 · 131 阅读 · 0 评论 -
LeetCode 101. Symmetric Tree
题目思路递归,和判断两个树是否相同原理类似,反转映射。代码# class TreeNode(object):# def __init__(self, x):# self.val = x# self.left = None# self.right = Noneclass Solution(object): ...原创 2018-03-06 21:33:46 · 145 阅读 · 0 评论 -
LeetCode 100. Same Tree
题目思路递归,判断左右子树。代码# Definition for a binary tree node.# class TreeNode(object):# def __init__(self, x):# self.val = x# self.left = None# self.right = Nonec...原创 2018-03-06 21:06:23 · 135 阅读 · 0 评论 -
LeetCode 236. Lowest Common Ancestor of a Binary Tree
题目思路递归。 现在左子树中找,再从右子树中找。 如果左子树和右子树都存在p或者q,那么当前节点就是LCA节点。 否则在左子树中或者右子树中。代码# Definition for a binary tree node.# class TreeNode(object):# def __init__(self, x):# self.val =...原创 2018-03-06 20:47:34 · 130 阅读 · 0 评论 -
nowcoder 非递归二叉树的序列打印
题目请用非递归方式实现二叉树的先序、中序和后序的遍历打印。 给定一个二叉树的根结点root,请依次返回二叉树的先序,中序和后序遍历(二维数组的形式)。思路非递归方式遍历二叉树。后序遍历有两种方式。代码# class TreeNode:# def __init__(self, x):# self.val = x# self.le原创 2018-01-29 19:38:51 · 167 阅读 · 0 评论 -
nowcoder 二叉树打印
题目有一棵二叉树,请设计一个算法,按照层次打印这棵二叉树。 给定二叉树的根结点root,请返回打印结果,结果按照每一层一个数组进行储存,所有数组的顺序按照层数从上往下,且每一层的数组内元素按照从左往右排列。保证结点数小于等于500。思路1:用一个队列和两个指针last和nlast,分别指向这一层最右端节点和下一层的最右端节点。不断遍历这一层节点,用一个队列,不断把下一层节点加入队原创 2017-12-19 11:24:46 · 228 阅读 · 0 评论 -
nowcoder 递归二叉树的序列打印
题目请用递归方式实现二叉树的先序、中序和后序的遍历打印。 给定一个二叉树的根结点root,请依次返回二叉树的先序,中序和后续遍历(二维数组的形式)。思路用递归方式进行二叉树的三种遍历。代码# class TreeNode:# def __init__(self, x):# self.val = x# self.left = N原创 2018-01-29 17:39:34 · 180 阅读 · 0 评论 -
LintCode 68. Binary Tree Postorder Traversal
题目思路非递归后序遍历。代码"""Definition of TreeNode:class TreeNode: def __init__(self, val): self.val = val self.left, self.right = None, None"""class Solution: """ @...原创 2018-02-09 21:04:53 · 166 阅读 · 0 评论 -
LintCode 67. Binary Tree Inorder Traversal
题目Given a binary tree, return the inorder traversal of its nodes’ values. Have you met this question in a real interview? Yes Example Given binary tree {1,#,2,3}, 1 \ 2 / ...原创 2018-02-09 18:49:26 · 244 阅读 · 0 评论 -
LintCode 66. Binary Tree Preorder Traversal
题目Given a binary tree, return the preorder traversal of its nodes’ values. Have you met this question in a real interview? Yes Example Given: 1 / \ 2 3 / \ 4 5 return [1,2,...原创 2018-02-09 18:35:48 · 298 阅读 · 0 评论 -
nowcoder 拓扑结构相同子树
题目对于两棵彼此独立的二叉树A和B,请编写一个高效算法,检查A中是否存在一棵子树与B树的拓扑结构完全相同。 给定两棵二叉树的头结点A和B,请返回一个bool值,代表A中是否存在一棵同构于B的子树。思路递归遍历两个树。当A的值和B的值相同时,从这个节点开始寻找。代码# class TreeNode:# def __init__(self, x):#原创 2018-01-23 16:21:42 · 250 阅读 · 0 评论 -
nowcoder 最大二叉搜索子树
题目有一棵二叉树,其中所有节点的值都不一样,找到含有节点最多 的搜索二叉子树,并返回这棵子树的头节点. 给定二叉树的头结点root,请返回所求的头结点,若出现多个节点最多的子树,返回头结点权值最大的。思路递归。分别找到一个节点左子树和右子树的搜索二叉子树的头节点。代码# class TreeNode:# def __init__(self, x):#原创 2018-01-30 21:29:26 · 299 阅读 · 0 评论 -
nowcoder 树上最远距离
题目从二叉树的节点A出发,可以向上或者向下走,但沿途的节点只能经过一次,当到达节点B时,路径上的节点数叫作A到B的距离。对于给定的一棵二叉树,求整棵树上节点间的最大距离。 给定一个二叉树的头结点root,请返回最大距离。保证点数大于等于2小于等于500.思路递归遍历左子树和右子树最大距离,更新全局最大距离。代码# class TreeNode:# def __i原创 2018-01-30 20:15:12 · 277 阅读 · 0 评论 -
nowcoder 寻找错误结点
题目一棵二叉树原本是搜索二叉树,但是其中有两个节点调换了位置,使得这棵二叉树不再是搜索二叉树,请找到这两个错误节点并返回他们的值。保证二叉树中结点的值各不相同。 给定一棵树的根结点,请返回两个调换了位置的值,其中小的值在前。思路搜索二叉树中序遍历有序,找到逆序的两个位置即可。代码# class TreeNode:# def __init__(self,原创 2018-01-30 19:20:24 · 251 阅读 · 0 评论 -
nowcoder 二叉树的序列化
题目首先我们介绍二叉树先序序列化的方式,假设序列化的结果字符串为str,初始时str等于空字符串。先序遍历二叉树,如果遇到空节点,就在str的末尾加上“#!”,“#”表示这个节点为空,节点值不存在,当然你也可以用其他的特殊字符,“!”表示一个值的结束。如果遇到不为空的节点,假设节点值为3,就在str的末尾加上“3!”。现在请你实现树的先序序列化。 给定树的根结点root,请返回二叉树序列化后原创 2018-01-29 20:02:57 · 190 阅读 · 0 评论 -
LintCode 97. Maximum Depth of Binary Tree
题目思路返回左子树和右子树最大高度。代码"""Definition of TreeNode:class TreeNode: def __init__(self, val): self.val = val self.left, self.right = None, None"""class Solution: """ ...原创 2018-02-10 16:48:12 · 157 阅读 · 0 评论 -
nowcoder 平衡二叉树判断
题目有一棵二叉树,请设计一个算法判断这棵二叉树是否为平衡二叉树。 给定二叉树的根结点root,请返回一个bool值,代表这棵树是否为平衡二叉树。思路递归,判断每个节点左右子树是否为AVL树,同时获取左右子树的高度。代码# class TreeNode:# def __init__(self, x):# self.val = x#原创 2018-01-29 20:32:48 · 184 阅读 · 0 评论