• 手撕代码之二叉树


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

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

     第一步、要构造节点类

    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());
                }
            }
            //此处还有后序遍历没有写,有兴趣的可以仿照写
    }
  • 相关阅读:
    ubuntu下安装eclipse
    UTC时间、GMT时间、本地时间、Unix时间戳
    [转]mysql使用关键字作为列名的处理方式
    mysql日期格式化
    ssh远程登陆看不到用户名和主机名
    ssh以root用户远程登录失败
    PowerBI发布到网页
    视图是否有主键的问题
    select count(*)和select count(1)
    PPT产品的重要性
  • 原文地址:https://www.cnblogs.com/xiaonantianmen/p/9786503.html
Copyright © 2020-2023  润新知