- 921. Minimum Add to Make Parentheses Valid 使括号有效的最少添加
- 915. Partition Array into Disjoint Intervals 分割数组
- 932. Beautiful Array 漂亮数组
- 940. Distinct Subsequences II 不同的子序列 II
题目地址:https://leetcode.com/problems/binary-tree-preorder-traversal/#/descriptionopen in new window
Given a binary tree, return the preorder traversal of its nodes' values.
Forexample:
Given binary tree {1,#,2,3},
1
\
2
/
3
return [1,2,3].
Note: Recursive solution is trivial, could you do it iteratively?
求一个二叉树的先序遍历。
递归的思路就是先保存根节点的值,然后递归左子树和右子树。
python代码如下:
# Definition for a binary tree node.
# class TreeNode(object):
# def __init__(self, x):
# self.val = x
# self.left = None
# self.right = None
class Solution(object):
def preorderTraversal(self, root):
"""
:type root: TreeNode
:rtype: List[int]
"""
if not root: return []
res = []
res.append(root.val)
res.extend(self.preorderTraversal(root.left))
res.extend(self.preorderTraversal(root.right))
return res
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19
Java代码如下:
public class Solution {
List<Integer> ans = new ArrayList<Integer>();
public List<Integer> preorderTraversal(TreeNode root) {
preOrder(root);
return ans;
}
public void preOrder(TreeNode root){
if(root == null){
return;
}
ans.add(root.val);
preOrder(root.left);
preOrder(root.right);
}
}
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
C++代码如下:
/**
* Definition for a binary tree node.
* struct TreeNode {
* int val;
* TreeNode *left;
* TreeNode *right;
* TreeNode(int x) : val(x), left(NULL), right(NULL) {}
* };
*/
class Solution {
public:
vector<int> preorderTraversal(TreeNode* root) {
vector<int> res;
preorder(root, res);
return res;
}
void preorder(TreeNode* root, vector<int>& res) {
if (!root) return;
res.push_back(root->val);
preorder(root->left, res);
preorder(root->right, res);
}
};
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23
迭代版本的需要使用栈,先把右孩子进栈,再左孩子进栈。
为什么这个访问顺序呢?我们知道栈是后进先出的数据结构,所以遍历完根节点之后,把右孩子放到栈里,把左孩子放到栈里,那么下一次在出栈的时候是左孩子,所以总之就是个根-->左-->右
先序遍历的过程了。
Python代码如下:
# Definition for a binary tree node.
# class TreeNode(object):
# def __init__(self, x):
# self.val = x
# self.left = None
# self.right = None
class Solution(object):
def preorderTraversal(self, root):
"""
:type root: TreeNode
:rtype: List[int]
"""
if not root: return []
res = []
stack = []
stack.append(root)
while stack:
node = stack.pop()
if not node:
continue
res.append(node.val)
stack.append(node.right)
stack.append(node.left)
return res
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25
Java代码如下:
public class Solution {
public List<Integer> preorderTraversal(TreeNode root) {
if(root == null){
return new ArrayList<Integer>();
}
List<Integer> ans = new ArrayList<Integer>();
Stack<TreeNode> stack = new Stack<TreeNode>();
stack.push(root);
while(!stack.isEmpty()){
TreeNode temp = stack.pop();
ans.add(temp.val);
if(temp.right != null){
stack.push(temp.right);
}
if(temp.left != null){
stack.push(temp.left);
}
}
return ans;
}
}
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21
C++代码如下:
/**
* Definition for a binary tree node.
* struct TreeNode {
* int val;
* TreeNode *left;
* TreeNode *right;
* TreeNode(int x) : val(x), left(NULL), right(NULL) {}
* };
*/
class Solution {
public:
vector<int> preorderTraversal(TreeNode* root) {
vector<int> res;
stack<TreeNode*> s;
s.push(root);
while (!s.empty()) {
auto node = s.top(); s.pop();
if (!node) continue;
res.push_back(node->val);
s.push(node->right);
s.push(node->left);
}
return res;
}
};
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25
DDKK.COM 弟弟快看-教程,程序员编程资料站,版权归原作者所有
本文经作者:负雪明烛 授权发布,任何组织或个人未经作者授权不得转发
我正在尝试使用返回 IEnumerable 的 yield return 实现 Tree Traversal PreOrder private IEnumerable Preorder(Node no
我正在尝试编写一个递归函数来预先打印出这些值。但是,由于某种原因,它一直打印出与我的 inOrder 函数相同的内容。 postOrder 函数可以正常工作,但我必须为那个函数稍微不同地执行递归函数。
preorderTransaversal构建二叉搜索树的方法,有什么建议请指教。 Node constructTreeFromPreorder(int[] arr,int start,int end)
为什么DOM树是先序,深度优先遍历? 与 BFT 等其他遍历相比,这种设计选择有什么优势? 我只是在调查 DOM standard并找到了 preceding 和 following 的定义: An
要从给定的前序遍历构造 BST,如果我尝试以与预序中给定的顺序相同的顺序插入 BST,我将得到 BST。那么,我们不通过对元素进行排序或执行任何其他算法来创建有序? 是否有一个例子表明不能仅通过插入元
题目地址:https://leetcode.com/problems/binary-tree-preorder-traversal/#/descriptionopen in new window 题
我想编写一个程序,可以构建二叉搜索树并显示 “预序”、“中序”和“后序”。 第一个输入是输入系列的数量。从第二行开始,每一行代表一个串行输入,用于构建二叉搜索树。 输入: 3 9,5,6,7,1,8,
我关注了this idea还有这个C++ code在 Java 中从 PreOrder 数组重建二叉搜索树。我不是重新发明算法,而是尝试实现伪代码。我在这里需要帮助。我没有得到正确的输出。我得到的输出
我知道如果没有中序和先序/后序遍历就无法构建树。因为对于给定的(仅 Inorder/Preorder/postorder),可能会生成更多数量的树。是否有任何算法或机制可以根据给定的(仅中序/先序/后
题目地址:https://leetcode.com/problems/verify-preorder-serialization-of-a-binary-tree/description/ 题目描述
有人可以教我如何使用 Proorder 和 Inorder 数组恢复二叉树吗?我见过一些例子(JavaScript 中没有),它们有点道理,但当我尝试编写时,递归调用永远不会返回完整的树。也很想看到解
我正在为一个类(class)使用 AVL 树。 我需要用散列来标识任何给定的树,为了构建该散列,我正在考虑查找树中所有元素的先序遍历,然后通过连接每个元素的散列来构建散列。 首先,我想确保相同的预订字
我需要一些递归方面的帮助。我正在尝试在 C# 中做一个二叉树,我想知道是否可以使用递归函数演示所有 Inorder/PostOrder 和 PreOrder 遍历。 我已经为 PreOrder 完成了
题目地址:https://leetcode.com/problems/construct-binary-search-tree-from-preorder-traversal/ 题目描述 Retu
题目地址:https://leetcode.com/problems/construct-binary-tree-from-preorder-and-inorder-traversal/descrip
我收到了一项任务,要求我必须从二叉树的 preOder 和 inOrder 返回其 postOrder 。用纸和铅笔来做这件事很容易,但任务是开发一个自动做这件事的java函数。它必须在 java 中
我已经执行过该程序几次,但我无法真正看到问题所在。基本上,它应该从 inOrder 和 preOrder 遍历数据(作为整数数组发送)重建二叉树。它是整数的二叉树。 这是我正在使用的树: 2
morris 遍历非常适用于 O(n) 时间和 O(1) 空间的 InOrder 遍历。是否有可能仅通过更改一些东西来使用相同的算法实现 PreOrder 和 PostOrder 遍历。 最佳答案 我
当我尝试打印 BST 的级别顺序时,这个问题提示了我。 这是一个 Pre-Order Sequence: 4, 1, 2, 3, 5, 6, 7, 8 In_order Sequence : 1, 2
考虑这棵树: 7 / \ / \ / \ 1 9 /
我是一名优秀的程序员,十分优秀!