前序遍历树

【题目描述】

给定一个二叉树,请你以前序遍历的顺序输出各个结点的编号。

【输入】

输入第一行一个整数n,表示有n个结点; 接下来输入n行每行三个数字,分别表示结点编号(0~n-1,0为根节点),父节点编号(-1表示无),左右子树(0左1右-1为根)。1≤n≤1000000。

【输出】

输出一行以空格分割的n个整数。

【输入样例】

7 0 -1 -1 1 0 0 3 0 1 2 1 0 4 1 1 5 2 0 6 2 1

【输出样例】

0 1 2 5 6 4 3


#include <bits/stdc++.h>
using namespace std;

int n, self, parent, tp;

struct Node
{
	int id;
	int parent;
	int left;
	int right;
};

Node a[1000001];

void visit(int root)
{
	if(root == -1) return;
	cout << root << " ";
	visit(a[root].left);
	visit(a[root].right);
}

int main()
{
	cin >> n;
	for(int i = 0; i < n; i++)
	{
		cin >> self >> parent >> tp;
		a[self].id = self;
		a[self].parent = parent;
		a[self].left = -1;
		a[self].right = -1;
		if(parent != -1)
		{
			if(tp == 0) a[parent].left = self;
			if(tp == 1) a[parent].right = self;
		}
	}
	visit(0);
	return 0;
}

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 可以使用递归的方法来实现并输出到一个 List 中。 首先,定义一个方法,接受一个节点和一个 List 作为参数: ``` void preorder(Node node, List<Integer> list) { if (node == null) { return; } // 将当节点的值加入到 List 中 list.add(node.val); // 遍左子 preorder(node.left, list); // 遍右子 preorder(node.right, list); } ``` 然后,调用这个方法,传入根节点和一个空的 List 即可: ``` List<Integer> list = new ArrayList<>(); preorder(root, list); ``` 这样,就能够得到一个包含结果的 List 了。 ### 回答2: Java结构并输出到一个List结构中的方法如下: 首先,定义一个节点类,包含节点的值和左右子节点的引用。 ```java class TreeNode { int val; TreeNode left; TreeNode right; TreeNode(int val) { this.val = val; left = null; right = null; } } ``` 其次,创建一个List用于存储遍结果。 ```java List<Integer> result = new ArrayList<>(); ``` 然后,编写一个递归方法来进行,并将节点值添加到List中。 ```java void preorderTraversal(TreeNode root, List<Integer> result) { if (root == null) { return; } result.add(root.val); // 将当节点的值添加到List中 preorderTraversal(root.left, result); // 递归遍左子 preorderTraversal(root.right, result); // 递归遍右子 } ``` 最后,使用以上代码,可以对进行,并将结果存储在List中。 ```java // 创建一个 TreeNode root = new TreeNode(1); root.left = new TreeNode(2); root.right = new TreeNode(3); root.left.left = new TreeNode(4); root.left.right = new TreeNode(5); // 进行 preorderTraversal(root, result); // 输出结果 System.out.println(result); ``` 运行以上代码,将会输出List中的元素,即结果。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值