leetcode tree related problems (update continuously)

leetcode Binary Tree Level Order Traversal

这道题是要进行二叉树的层次遍历,对于层次遍历,最简单直观的办法就是进行BFS。于是我们只需要维护一个队列就可以了,队列里面的元素需要记录该节点的内容和节点所在的层,依次从队列中取出节点进行扩展就可以了。

# Definition for a  binary tree node
# class TreeNode:
#     def __init__(self, x):
#         self.val = x
#         self.left = None
#         self.right = None

class Solution:
    # @param root, a tree node
    # @return a list of lists of integers
    def levelOrder(self, root):
        if(root == None):
            return []

        queue = []
        queue.append((0, root))

        ans = []
        cur = 0
        cur_nodes = []
        while len(queue) != 0:
            level, fa = queue.pop(0)
            if(level == cur):
                cur_nodes.append(fa.val)
            else:
                ans.append(cur_nodes)
                cur_nodes = []
                cur_nodes.append(fa.val)
                cur = level
            if fa.left != None:
                queue.append((level+1, fa.left))
            if fa.right != None:
                queue.append((level+1, fa.right))
        ans.append(cur_nodes)
        return ans
时间: 2024-08-09 06:33:29

leetcode tree related problems (update continuously)的相关文章

dp related problems (update continuously)

Leetcode Maximum Product Subarray 这道题是说给一个整数数组,求最大的连续子数组的乘积.纠结了好久数组中包含0和负数怎么处理,其实关键就是负数的处理,于是我们记一个最大正值和最小负值,这样就可以很容易的处理负数的情况了.对于当前元素如果是负数,那么最大值可能是前面的最小负值乘以当前的负数:如果是正数,那么则很有可能是前面的最大正值乘以当前正数. 于是我们记dpp[i]为以第i个数结尾的最大正值,dpn[i]表示以第i个数结尾的最小负值,那么就有下面的两种更新情况:

[Leetcode][Tree][Binary Tree Maximum Path Sum]

找书中权值和最大的路径,至少包含一个点. 有点类似LCA(最近公共祖先),树的问题关键是如何划分子问题,然后递归求解. 想到了可以返回两种结果,一个是单独路径的最大和,一种是子树的最大和,然后在求解的过程中不断的更新答案. 1 /** 2 * Definition for binary tree 3 * struct TreeNode { 4 * int val; 5 * TreeNode *left; 6 * TreeNode *right; 7 * TreeNode(int x) : val

LeetCode[Tree]: Populating Next Right Pointers in Each Node II

Follow up for problem "Populating Next Right Pointers in Each Node". What if the given tree could be any binary tree? Would your previous solution still work? Note: You may only use constant extra space. For example, Given the following binary t

[Leetcode][Tree][Binary Tree Postorder Traversal]

二叉树的后续遍历 1.递归版本 /** * Definition for binary tree * struct TreeNode { * int val; * TreeNode *left; * TreeNode *right; * TreeNode(int x) : val(x), left(NULL), right(NULL) {} * }; */ class Solution { public: void dfsPostorderTraversal(TreeNode *now, vec

【leetcode】com/problems/surrounded-regions/

dfs 栈溢出,bfs超时,用dfs非递归就不溢出了,前后写了1一个星期class node { int i; int j; public node(int i1,int j1) { i=i1; j=j1; } } public class Solution { public void solve(char[][] board) { int len1=board.length; if(len1<=0)return; int len2=board[0].length; if(len1<=2||l

LeetCode[Tree]: Construct Binary Tree from Inorder and Postorder Traversal

Given inorder and postorder traversal of a tree, construct the binary tree. Note: You may assume that duplicates do not exist in the tree. 这个题目的解法与LeetCode[Tree]: Construct Binary Tree from Preorder and Inorder Traversal的解法几乎相差无几.我的C++代码实现如下: class S

[Leetcode][Tree][Binary Tree Preorder Traversal]

二叉树的前序遍历:root点先被访问,然后是left和right子节点.迭代的版本也相对好写. 1.递归版本:时间复杂度O(N),空间复杂度O(N) 1 /** 2 * Definition for binary tree 3 * struct TreeNode { 4 * int val; 5 * TreeNode *left; 6 * TreeNode *right; 7 * TreeNode(int x) : val(x), left(NULL), right(NULL) {} 8 * }

LeetCode[Tree]: Binary Tree Level Order Traversal II

Given a binary tree, return the bottom-up level order traversal of its nodes' values. (ie, from left to right, level by level from leaf to root). 这个简单的问题可以这样解决:利用LeetCode[Tree]: Binary Tree Level Order Traversal相同的方法得到自顶向下的层序遍历结果之后,将结果翻转即可.也可以插入的时候不从

[Leetcode][Tree][Binary Tree Inorder Traversal]

二叉树的中序遍历 1.递归版本 /** * Definition for binary tree * struct TreeNode { * int val; * TreeNode *left; * TreeNode *right; * TreeNode(int x) : val(x), left(NULL), right(NULL) {} * }; */ class Solution { public: void dfsInorderTraversal(TreeNode *root, vect