leetcode-----二叉树的前序遍历(递归和非递归)

(1)方法一:递归

import java.util.*;

/*
 * public class TreeNode {
 *   int val = 0;
 *   TreeNode left = null;
 *   TreeNode right = null;
 * }
 */

public class Solution {
    /**
     * 
     * @param root TreeNode类 
     * @return int整型ArrayList
     */
    ArrayList<Integer> list = new ArrayList<>();
    public ArrayList<Integer> preorderTraversal (TreeNode root) {
        if(root!=null){
            list.add(root.val); //根节点
            preorderTraversal(root.left); //左子树
            preorderTraversal(root.right); //右子树
        }
        return list;
    }
}

(2)方法二:非递归

import java.util.*;

/*
 * public class TreeNode {
 *   int val = 0;
 *   TreeNode left = null;
 *   TreeNode right = null;
 * }
 */

public class Solution {
    /**
     * 
     * @param root TreeNode类 
     * @return int整型ArrayList
     思路:非递归。借助栈来实现
     */
    int MAXSIZE=100;
    ArrayList<Integer> list = new ArrayList<>();
    TreeNode s[] = new TreeNode[MAXSIZE];
    int top=-1;
    public ArrayList<Integer> preorderTraversal (TreeNode root) {
        if(root==null){
            return list;
        }
        //每次结点进栈时访问
        s[++top] = root;
        
        while(top!=-1){
            TreeNode p = s[top--];//出栈栈顶元素
            list.add(p.val);
            if(p.right!=null){
                s[++top] = p.right;
            }
            if(p.left!=null){
                s[++top] = p.left;
            }
        }//while
        return list;
    }
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值