完全二叉树遍历

完全二叉树的三种遍历:
  • 前序遍历:根 — 左子树 — 右子树
  • 中序遍历:左子树 — 根 — 右子树
  • 后序遍历:左子树 — 右子树 — 根
import java.util.LinkedList;
import java.util.List;

public class BTreeTraverse {  

    private static List<Node> list = new LinkedList<Node>();  

    public static void main(String[] args) {  
        int[] arr = { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 };  
        createdBTree(arr);  
        Node rootNode = list.get(0);  
        System.out.println("前序遍历:");  
        preTraverse(rootNode);  
        System.out.println();  
        System.out.println("中序遍历:");  
        middleTraverse(rootNode);  
        System.out.println();  
        System.out.println("后序遍历:");  
        tailTraverse(rootNode);  
    }  

    public static void preTraverse(Node node) {  
        if (node == null)
            return;  
        System.out.print(node.getData() + " ");  
        preTraverse(node.getLeftChildNode());  
        preTraverse(node.getRightChildNode());  
    }  

    public static void middleTraverse(Node node) {  
        if (node == null)  
            return;  
        middleTraverse(node.getLeftChildNode());  
        System.out.print(node.getData() + " ");  
        middleTraverse(node.getRightChildNode());  
    }  

    public static void tailTraverse(Node node) {  
        if (node == null)  
            return;  
        tailTraverse(node.getLeftChildNode());  
        tailTraverse(node.getRightChildNode());  
        System.out.print(node.getData() + " ");  
    }  

    public static void createdBTree(int[] arr) { 

        int len = arr.length;  

        for (int i = 0; i < len; i++) 
        {
            list.add( new Node(arr[i]) );  
        }  

        for (int i = len / 2 - 1; i >= 0; i--) 
        {

            list.get(i).setLeftChildNode( list.get(getLeftChild(i)) );

            if ( getLeftChild(i) < (len - 1) ) 
            {  
                list.get(i).setRightChildNode( list.get(getLeftChild(i) + 1) );  
            }  
        }  
    }  

    private static int getLeftChild(int i) {  
        return 2 * i + 1;  
    }  
}  

class Node {  
    private Node leftChildNode;  
    private Node rightChildNode;  
    private int data;  

    public Node(int data) {  
        this.data = data;  
    }  

    public Node getLeftChildNode() {  
        return leftChildNode;  
    }  

    public void setLeftChildNode(Node leftChildNode) {  
        this.leftChildNode = leftChildNode;  
    }  

    public Node getRightChildNode() {  
        return rightChildNode;  
    }  

    public void setRightChildNode(Node rightChildNode) {  
        this.rightChildNode = rightChildNode;  
    }  

    public int getData() {  
        return data;  
    }  

    public void setData(int data) {  
        this.data = data;  
    }  

}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值