Java ---- 遍歷鏈表(遞歸與非遞歸實現)


package test;
//前序遍歷的遞歸實現與非遞歸實現
import java.util.Stack;
public class Test 
{
    public static void main(String[] args)
    {
        TreeNode[] node = new TreeNode[10];//以數組形式生成一棵完全二叉樹
        for(int i = 0; i < 10; i++)
        {
            node[i] = new TreeNode(i);
        }
        for(int i = 0; i < 10; i++)
        {
            if(i*2+1 < 10)
                node[i].left = node[i*2+1];
            if(i*2+2 < 10)
                node[i].right = node[i*2+2];
        }
        
        preOrderRe(node[0]);
    }
    
    public static void preOrderRe(TreeNode biTree)
    {//遞歸實現
        System.out.println(biTree.value);
        TreeNode leftTree = biTree.left;
        if(leftTree != null)
        {
            preOrderRe(leftTree);
        }
        TreeNode rightTree = biTree.right;
        if(rightTree != null)
        {
            preOrderRe(rightTree);
        }
    }
    
    public static void preOrder(TreeNode biTree)
    {//非遞歸實現
        Stack<TreeNode> stack = new Stack<TreeNode>();
        while(biTree != null || !stack.isEmpty())
        {
            while(biTree != null)
            {
                System.out.println(biTree.value);
                stack.push(biTree);
                biTree = biTree.left;
            }
            if(!stack.isEmpty())
            {
                biTree = stack.pop();
                biTree = biTree.right;
            }
        }
    }
}
 
class TreeNode//節點結構
{
    int value;
    TreeNode left;
    TreeNode right;
    
    TreeNode(int value)
    {
        this.value = value;
    }
}

 

二叉樹的遍歷

二叉樹的遍歷分為三種:前序遍歷 中序遍歷 后序遍歷

 

前序遍歷:按照“根左右”,先遍歷根節點,再遍歷左子樹 ,再遍歷右子樹

中序遍歷:按照“左根右“,先遍歷左子樹,再遍歷根節點,最后遍歷右子樹

后續遍歷:按照“左右根”,先遍歷左子樹,再遍歷右子樹,最后遍歷根節點 

其中前,后,中指的是每次遍歷時候的根節點被遍歷的順序 

 

二叉樹遍歷:

前根左右

中左根右

后左右根

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM