java二叉樹非遞歸之中序遍歷

思路:使用輔助棧改寫遞歸程序,中序遍歷沒有前序遍歷好寫,其中之一就在於入棧出棧的順序和限制規則。我們採用「左根右」的訪問順序可知主要由如下四步構成。
步驟:
1.首先需要一直對左子樹迭代並將非空節點入棧
2.節點指針爲空後不再入棧
3.當前節點爲空時進行出棧操作,並訪問棧頂節點
4.將當前指針p用其右子節點替代
步驟2,3,4對應「左根右」的遍歷結構,只是此時的步驟2取的左值爲空。
/** 
 * Definition for a binary tree node. 
 * public class TreeNode { 
 *     int val; 
 *     TreeNode left; 
 *     TreeNode right; 
 *     TreeNode(int x) { val = x; } 
 * } 
 */  
public class Solution {  
    public List<Integer> inorderTraversal(TreeNode root) {  
        List<Integer> result = new ArrayList<Integer>();  
        Stack<TreeNode> s = new Stack<TreeNode>();  
        while (root != null || !s.empty()) {  
            if (root != null) {  
                s.push(root);  
                root = root.left;  
            } else {  
                root = s.pop();  
                result.add(root.val);  
                root = root.right;  
            }  
        }  
  
        return result;  
    }  
}



轉載自:http://blog.csdn.net/u013812939/article/details/47295311

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章