前序,中序,后序遍历Java实现(递归算法)

来源:互联网 发布:caffe视频教程 编辑:程序博客网 时间:2024/06/06 07:44

一道HP的面试题,拿来复习下递归:

import java.util.Stack;/** * */public class TreeTest {    public static void main(String[] args) {        Noder root = Noder.init();                System.out.println("DLR:");        Noder.preOrder(root);        System.out.println("");        System.out.println("LDR:");        Noder.inOrder(root);        System.out.println("");        System.out.println("LRD:");        Noder.postOrder(root);             }}class Noder {    private String name;    private Noder leftNoder;    private Noder rightNoder;        public Noder(String name, Noder leftNoder, Noder rightNoder) {        this.name = name;        this.leftNoder = leftNoder;        this.rightNoder = rightNoder;    }    public static Noder init() {        Noder D = new Noder("D",null,null);        Noder E = new Noder("E",null,null);        Noder F = new Noder("F",null,null);        Noder G = new Noder("G",null,null);        Noder B = new Noder("B",D,E);        Noder C = new Noder("C",F,G);        Noder A = new Noder("A",B,C);        return A;    }        public static void printNode(Noder noder){        System.out.print(noder.getName()+" ");    }        public static void preOrder(Noder noder){        if(noder != null){            printNode(noder);            preOrder(noder.getLeftNoder());            preOrder(noder.getRightNoder());        }    }        public static void inOrder(Noder noder){        if(noder != null){            inOrder(noder.getLeftNoder());            printNode(noder);            inOrder(noder.getRightNoder());        }    }        public static void postOrder(Noder noder){        if(noder != null){            postOrder(noder.getLeftNoder());            postOrder(noder.getRightNoder());            printNode(noder);        }    }        public static void stackPreOrder(Noder noder){        Stack<Noder> stack = new Stack<Noder>();        if(noder != null){            stack.push(noder);            while(!stack.empty()){                noder = stack.pop();                printNode(noder);                if(noder.getRightNoder()!=null){                    stack.push(noder.getRightNoder());                }                if(noder.getLeftNoder()!=null){                    stack.push(noder.getLeftNoder());                }            }        }    }        public String getName() {        return name;    }    public void setName(String name) {        this.name = name;    }    public Noder getLeftNoder() {        return leftNoder;    }    public void setLeftNoder(Noder leftNoder) {        this.leftNoder = leftNoder;    }    public Noder getRightNoder() {        return rightNoder;    }    public void setRightNoder(Noder rightNoder) {        this.rightNoder = rightNoder;    }}