给你二叉树的根节点 root ,返回它节点值的 前序 遍历。
数据范围:二叉树的节点数量满足
,二叉树节点的值满足
,树的各节点的值各不相同
示例 1:
public class Solution {
List<Integer> list = new ArrayList<>();
public int[] preorderTraversal (TreeNode root) {
List<Integer> list = preOrder(root);
int[] res = new int[list.size()];
for (int i = 0; i < list.size(); i++) {
res[i] = list.get(i);
}
return res;
}
List<Integer> preOrder(TreeNode node) {
if (node == null) {
return list;
}
list.add(node.val);
preOrder(node.left);
preOrder(node.right);
return list;
}
} class Solution: def preorderTraversal(self , root: TreeNode) -> List[int]: # write code here if not root: return [] return [root.val] + self.preorderTraversal(root.left) + self.preorderTraversal(root.right)
#include <stdio.h>
#include <stdlib.h>
//记录结点个数
int count=0;
//存储结点值,方便返回
int arr[101];
//先根后左右
void preOrder(struct TreeNode*root,int*arr)
{
if(root)
{
arr[count++]=root->val;
preOrder(root->left, arr);
preOrder(root->right, arr);
}
}
int* preorderTraversal(struct TreeNode* root, int* returnSize ) {
// write code here
preOrder(root, arr);
//便利侯,关系结点数量
*returnSize=count;
return arr;
} #include <stdio.h>
#include <stdlib.h>
struct TreeNode* stack[100]; //作为栈使用,栈底是下标0
int stack_top = -1;
//入栈
void push(struct TreeNode* node)
{
stack[++stack_top] = node;
}
//出栈
struct TreeNode* pop()
{
return stack[stack_top--];
}
//先序遍历 根->左->右
//用栈实现,先进后出
int* preorderTraversal(struct TreeNode* root, int* returnSize) {
if (!root)
{
*returnSize = 0;
return NULL;
}
int* ret_arr = malloc(sizeof(int) * 100);
int i = 0;
while (root || stack_top != -1)
{
//从根节点开始
while (root)
{
//根节点存在,保存val
ret_arr[i++] = root->val;
//每个根节点入栈
push(root);
//根节点左移,也就是每次先将左值保存
//无左结点,跳出对右节点操作
root = root->left;
}
//根节点等于栈顶元素,即上一个无左结点的节点
root = pop();
//开始遍历右节点
root = root->right;
}
*returnSize = i;
return ret_arr;
} static int count = 0;
void preOrder(struct TreeNode *root,int *a){
if(root != NULL){
a[count++] = root->val;
preOrder(root->left, a);
preOrder(root->right, a);
}
}
int* preorderTraversal(struct TreeNode* root, int* returnSize ) {
int *a = (int*)malloc(sizeof(int)*101);
preOrder(root, a);
*returnSize = count;
return a;
} public class Solution {
/**
* 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
*
*
* @param root TreeNode类
* @return int整型一维数组
*/
public int[] preorderTraversal (TreeNode root) {
// 前序遍历: this -> left -> right
// 存储前序遍历的结果
List<Integer> arrayList = new ArrayList<Integer>();
// 前序遍历
dfs(root, arrayList);
// 转int数组
return arrayList.stream().mapToInt(i->i).toArray();
}
public void dfs(TreeNode root, List<Integer> arrayList){
// 等于空不进行遍历
if (root == null){
return;
}
// 存储当前节点
arrayList.add(root.val);
// 向左子树遍历
dfs(root.left,arrayList);
// 向右子树遍历
dfs(root.right,arrayList);
}
} class Solution: l = [] def preorderTraversal(self , root: TreeNode) -> List[int]: # write code here if root == None: return self.l.append(root.val) self.preorderTraversal(root.left) self.preorderTraversal(root.right) return self.l
class Solution {
public:
/**
* 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
*
*
* @param root TreeNode类
* @return int整型vector
*/
void traversal(TreeNode* cur,vector<int>&vec){
if(cur==nullptr)return;
vec.push_back(cur->val);
traversal(cur->left,vec);
traversal(cur->right,vec);
}
vector<int> preorderTraversal(TreeNode* root) {
vector<int> res;
traversal(root,res);
return res;
}
};
function preorderTraversal( root ) {
// write code here
var node=root
var result=[]
var preorderTraversalNode=function(node,result){
if(node!==null){
result.push(parseInt(node.val))
preorderTraversalNode(node.left,result)
preorderTraversalNode(node.right,result)
}
}
preorderTraversalNode(node,result)
return result
} public int[] preorderTraversal(TreeNode root) {
List<Integer> list = new ArrayList<>();
if (root != null) {
Stack<TreeNode> stack = new Stack<>();
stack.push(root);
while (!stack.isEmpty()) {
TreeNode node = stack.pop();
list.add(node.val);
if (node.right != null) stack.push(node.right);
if (node.left != null) stack.push(node.left);
}
}
int[] arr = new int[list.size()];
for (int i = 0; i < list.size(); i++) {
arr[i] = list.get(i);
}
return arr;
} class Solution: def preorderTraversal(self , root ): # write code here if not root:return [] sys.setrecursionlimit(1500) return [root.val] + self.preorderTraversal(root.left) + self.preorderTraversal(root.right)
func preorderTraversal( root *TreeNode ) []int {
// write code here
var res []int
peorder(&res, root)
return res
}
func peorder(res *[]int, root *TreeNode){
if root == nil{
return
}
*res = append(*res, root.Val)
peorder(res, root.Left)
peorder(res, root.Right)
} void preorderTraver(struct TreeNode* root, int* res, int* StaticReturnSize ) {
res[(*StaticReturnSize)++] = root->val;
if(root->left!=NULL)
preorderTraver(root->left, res, StaticReturnSize);
if(root->right!=NULL)
preorderTraver(root->right, res, StaticReturnSize);
}
int* preorderTraversal(struct TreeNode* root, int* returnSize ) {
static int res[100]={0}, StaticReturnSize=0;
if(root==NULL)
return NULL;
preorderTraver(root, res, &StaticReturnSize);
*returnSize = StaticReturnSize;
return res;
} class TreeNode: def __init__(self, x): self.val = x self.left = None self.right = None class Solution: def preorderTraversal(self, root: TreeNode) -> List[int]: result = [] self.preorderTraversalRecursive(root, result) return result def preorderTraversalRecursive(self, node, result): if not node: return # 访问当前节点的值 result.append(node.val) # 递归遍历左子树 self.preorderTraversalRecursive(node.left, result) # 递归遍历右子树 self.preorderTraversalRecursive(node.right, result)
/**
* struct TreeNode {
* int val;
* struct TreeNode *left;
* struct TreeNode *right;
* TreeNode(int x) : val(x), left(nullptr), right(nullptr) {}
* };
*/
class Solution {
public:
/**
* 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
*
*
* @param root TreeNode类
* @return int整型vector
*/
vector<int> preorderTraversal(TreeNode* root) {
// write code here
vector<int> res;
preOrder(res, root);
return res;
}
void preOrder(vector<int> &res, TreeNode *root) { //传入数组的引用,根结点的指针
if (root == nullptr) return;
res.push_back(root->val);
preOrder(res, root->left); //递归遍历
preOrder(res, root->right);
}
};