zoukankan      html  css  js  c++  java
  • 手撕代码之二叉树

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

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

     第一步、要构造节点类

    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());
                }
            }
            //此处还有后序遍历没有写,有兴趣的可以仿照写
    }
  • 相关阅读:
    css之页面顶部阴影
    css之使用 :not() 在菜单上应用/取消应用边框
    CSS之黑白图像
    AMD/CMD规范
    HTTP学习笔记
    MUI之ajax获取后台接口数据
    Git提交代码规范
    Unicode与UTF-8/UTF-16/UTF-32的区别
    系统编程书籍推荐
    单口双线PC连接转换器 手机电脑耳机转接线
  • 原文地址:https://www.cnblogs.com/xiaonantianmen/p/9786503.html
Copyright © 2011-2022 走看看