手撕代码之二叉树

在最近的面试中,面试官经常要面试者手撕代码,哎奈何本人只知道原理,一到手撕就死乔乔了。

第一题:宜信一面手撕代码之写代码实现一个栈的的前序遍历:

 第一步、要构造节点类

public class Node {
    private int data;
    private Node leftChild;//左孩子
    private Node rightChild;//右孩子
    
    public Node(int data,Node leftChild,Node rightChild){
        this.data = data;
        this.leftChild = leftChild; 
        this.rightChild = rightChild;
    }

    public int getData() {
        return data;
    }

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

    public Node getLeftChild() {
        return leftChild;
    }

    public void setLeftChild(Node leftChild) {
        this.leftChild = leftChild;
    }

    public Node getRightChild() {
        return rightChild;
    }

    public void setRightChild(Node rightChild) {
        this.rightChild = rightChild;
    }    
}

第二步、使用遍历的方法写写前序遍历

public class BinaryTree {
    //注意必须逆序建立,先建立子节点,再逆序往上建立,
    //因为非叶子结点会使用到下面的节点,而初始化是按顺序初始化的,
    //不逆序建立会报错  
     public Node init() {
            Node J = new Node(8, null, null);  
            Node H = new Node(4, null, null);  
            Node G = new Node(2, null, null);  
            Node F = new Node(7, null, J);  
            Node E = new Node(5, H, null);  
            Node D = new Node(1, null, G);  
            Node C = new Node(9, F, null);  
            Node B = new Node(3, D, E);  
            Node A = new Node(6, B, C);  
            return A;   //返回根节点  
        }
        
        public void printNode(Node node){  
            System.out.print(node.getData());  
        }  
        //先序遍历的顺序中左右
        public void theFirstTraversal(Node root) { 
            printNode(root);  
            if (root.getLeftChild() != null) {  //使用递归进行遍历左孩子  
                theFirstTraversal(root.getLeftChild());  
            }  
            if (root.getRightChild() != null) {  //递归遍历右孩子  
                theFirstTraversal(root.getRightChild());  
            }  
        } 
       //中序遍历,左中右 
        public void theInOrderTraversal(Node root) {  
            if(root.getLeftChild() != null){
                theInOrderTraversal(root.getLeftChild());
            }
            printNode(root);
            if (root.getRightChild() != null) {
                theInOrderTraversal(root.getRightChild());
            }
        }
        //此处还有后序遍历没有写,有兴趣的可以仿照写
}

 

posted @ 2018-10-14 21:12  小南天门  阅读(773)  评论(0编辑  收藏  举报