public List<Integer> preorderTraversal(TreeNode root) { List<Integer> result = new ArrayList<>(); if (root == null) return result; Stack<TreeNode> stack = new Stack<>(); stack.push(root); while (!stack.isEmpty()) { TreeNode node = stack.pop(); result.add(node.val); if (node.right != null) stack.push(node.right); if (node.left != null) stack.push(node.left); } return result; } }
时间: 2024-04-11 10:29:45 浏览: 126
这段代码是一个二叉树的前序遍历算法实现。它使用了栈来辅助遍历。首先,将根节点压入栈中。然后,循环执行以下操作:弹出栈顶节点,将其值加入结果列表中,然后将其右子节点(如果存在)压入栈中,最后将其左子节点(如果存在)压入栈中。直到栈为空时,遍历结束,返回结果列表。
这个算法的时间复杂度是O(n),其中n是二叉树的节点个数。因为每个节点都会被访问一次且仅被访问一次。
你还有其他问题吗?
相关问题
Queue<TreeNode>
`Queue<TreeNode>`是一个队列,其中存储的元素类型是`TreeNode`。在Java中,`Queue`是一种接口,它定义了队列的基本操作,如入队、出队、查看队首元素等。`TreeNode`则是一个表示树节点的数据结构,通常用于树的遍历。
使用`Queue<TreeNode>`可以在树的遍历中实现广度优先搜索(BFS),即从根节点开始,先访问当前节点的所有子节点,再访问这些子节点的子节点,以此类推,直到遍历完整棵树。BFS通常使用队列来存储待访问的节点,每次从队列头部取出一个节点进行访问,并将其所有子节点加入队列尾部。
以下是一个简单的示例代码,使用`Queue<TreeNode>`实现树的BFS遍历:
```
public List<Integer> bfs(TreeNode root) {
List<Integer> result = new ArrayList<>();
Queue<TreeNode> queue = new LinkedList<>();
if (root != null) {
queue.offer(root); // 将根节点入队
}
while (!queue.isEmpty()) {
TreeNode node = queue.poll(); // 取出队首节点
result.add(node.val); // 访问当前节点
if (node.left != null) {
queue.offer(node.left); // 将左子节点入队
}
if (node.right != null) {
queue.offer(node.right); // 将右子节点入队
}
}
return result;
}
```
在上述代码中,`queue.offer()`方法用于将一个节点入队,`queue.poll()`方法用于取出队首节点并从队列中移除,`queue.isEmpty()`方法用于判断队列是否为空。这里的`TreeNode`表示树节点,包含一个整型值`val`和左右子节点的引用。`bfs()`方法接收一个根节点作为参数,返回一个整型列表,列表中存储了树的BFS遍历结果。
java将递归转list
请问您是要将一个递归结构转换成一个列表吗?如果是的话,可以按照下面的步骤进行操作:
1. 定义一个类来表示递归结构。这个类应该有一个属性来表示当前节点的值,以及一个列表来存储子节点。
```
class TreeNode {
int val;
List<TreeNode> children;
TreeNode(int val) {
this.val = val;
this.children = new ArrayList<>();
}
}
```
2. 编写一个递归函数来遍历树,将节点的值添加到列表中。
```
public List<Integer> flatten(TreeNode root) {
List<Integer> result = new ArrayList<>();
if (root == null) {
return result;
}
result.add(root.val);
for (TreeNode child : root.children) {
result.addAll(flatten(child));
}
return result;
}
```
3. 调用这个函数来将递归结构转换成一个列表。
```
TreeNode root = new TreeNode(1);
TreeNode node1 = new TreeNode(2);
TreeNode node2 = new TreeNode(3);
TreeNode node3 = new TreeNode(4);
root.children.add(node1);
root.children.add(node2);
node2.children.add(node3);
List<Integer> result = flatten(root);
System.out.println(result); // [1, 2, 3, 4]
```
这样就可以将一个递归结构转换成一个列表了。
阅读全文