二叉樹的先序遍歷BTPreorderTraversal

public class BTPreorderTraversal
{
    //節點數據結構
    static class TreeNode
    {
        int val;
        TreeNode left;
        TreeNode right;

        TreeNode(int x)
        {
            val = x;
        }
    }
    
    public static ArrayList<Integer> preorderTraversal(TreeNode root)
    {
        if(null == root)
        {
            return null;
        }
        ArrayList<Integer> _values = new ArrayList<Integer>();
        Deque<TreeNode> _nodes = new ArrayDeque<TreeNode>();
        TreeNode _p = root;
        //從根節點開始,依次把左節點入棧並取值,若其左節點爲空,把該節點出棧(已經被訪問過),再訪問其右節點,重複該過程
        while(null != _p || !_nodes.isEmpty())
        {
            if(null != _p)
            {
                _values.add(_p.val);
                _nodes.push(_p);
                _p = _p.left;
            }
            else
            {
                _p = _nodes.peek();
                _nodes.pop();
                _p = _p.right;
            }
        }
        
        return _values;
    }
   
}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章