pursue wind pursue wind
首页
Java
Python
数据库
框架
Linux
中间件
前端
计算机基础
DevOps
项目
面试
书
关于
归档
MacOS🤣 (opens new window)
GitHub (opens new window)
首页
Java
Python
数据库
框架
Linux
中间件
前端
计算机基础
DevOps
项目
面试
书
关于
归档
MacOS🤣 (opens new window)
GitHub (opens new window)
  • 技术面试题篇

  • 面试准备篇

  • 技术面试题自测篇

  • 练级攻略篇

  • 工作篇

  • 面经篇

  • 笑傲Java面试

    • 2-1 导学-Java编程技巧部分
    • 2-2 IDEA Java配置补充
    • 2-4 Java8 Stream 接口:流和并发计算实例
    • 2-5 和面试官聊聊实现管道和流计算的基石:函数式的Monad
    • 2-6 Buffer的原理和使用场景+面试题解读
    • 2-7 补充提问:同步和阻塞、异步和非阻塞等不等价?
    • 2-8 阿里面试题:中文乱码处理和大文件计算词频
    • 2-9 实战场景Coding训练:解读反射+代理+AOP 并结合业务逻辑实现
    • 2-10 注解部分答案
    • 2-11 反射-元编程面试题目合集
    • 2-12 面试必备:Java8-11的新特性和理解的误区
    • 2-13 白板篇-Java编程总结(以及面试题)
    • 3-1 算法和数据结构导学
    • 3-2 教你面试时不会忘记的5种手写排序
    • 3-3 手写链表算法
    • 3-4 手写栈和队列面试专项
    • 3-5 课后习题+面试题:用栈和队列实现表达式解析
    • 3-6 迷宫伪代码和8皇后问题源代码
    • 3-7 3-7 树部分源代码
      • 3-8 8皇后问题
      • 3-10 动态规划的课前题目
      • 3-11 总结和课后习题:白板篇-数据结构和算法
      • 4-1 解读:并发编程知识体系
      • 4-2 看看你的基础:Java线程状态之间如何转换?
      • 4-3 CAS和原子操作
      • 4-4 同步器(上篇)——面试官问synchronized本质是什么?
      • 4-5 同步器(中)——AbstractQueuedSynchronizer
      • 4-6 面试官:说6个Java的同步器?
      • 4-7 面试官出难题:并发环境下单例怎么写性能最高
      • 4-8 面试官:LinkedBlockingDeque和SynchronousQueue工作原理一样吗?
      • 4-9 面试要点:volatile的简短补充
      • 4-10 给面试官讲讲无锁编程(Lock-Free Programming)
      • 4-11 高阶并发编程Coding训练:N种优化哲学家就餐问题的方法
      • 4-12 并发基础篇:总结和思考题
      • 4-13 并发部分的通关Boss: 生成、发放大量红包并控制资金流速
    • LeetCode

    • 面试
    • 笑傲Java面试
    pursuewind
    2021-12-13
    目录

    3-7 3-7 树部分源代码

    # 3-7 树部分源代码

    # 3-7 树部分源代码

    package datastructure;
    
    import org.junit.Test;
    
    public class BSTree<T extends Comparable<T>> {
    
        BSTNode<T> root = null;
    
        static class BSTNode<T> {
            BSTNode<T> left = null;
            BSTNode<T> right = null;
            T data;
    
            public BSTNode(T data) {
                this.data = data;
            }
        }
    
        private void add(BSTNode<T> node, BSTNode<T> element) {
    
            if(element.data.compareTo(node.data) <= 0) {
                if(node.left == null) {
                    node.left = element;
                    return;
                }
                add(node.left, element);
            } else {
                if(node.right == null) {
                    node.right = element;
                    return;
                }
                add(node.right, element);
            }
    
        }
    
        public void add(T element) {
            var node = new BSTNode<>(element);
            if(root == null) {
                root = node;
                return;
            }
    
            add(root, node);
    
        }
    
        <T> void preOrder(BSTNode<T> node) {
    
            if(node == null) {
                return;
            }
    
            System.out.println(node.data);
            preOrder(node.left);
            preOrder(node.right);
    
        }
    
        <T> void postOrder(BSTNode<T> node){
            if(node == null) {
                return;
            }
    
            postOrder(node.left);
            postOrder(node.right);
            System.out.println(node.data);
    
        }
    
        <T> void inOrder(BSTNode<T> node){
            if(node == null) {
                return;
            }
    
            inOrder(node.left);
            System.out.println(node.data);
            inOrder(node.right);
    
        }
    
        // Breadth First Search
        public static <T> void bfs(BSTNode<T> node){
    
    
            var queue = new Queue<BSTNode<T>>();
            queue.enqueue(node);
    
            while(queue.size() > 0) {
                var item = queue.dequeue();
                System.out.println(item.data);
    
                if(item.left != null)
                    queue.enqueue(item.left);
                if(item.right != null)
                    queue.enqueue(item.right);
            }
        }
    
        public static <T> void reverse(BSTNode<T> node) {
            if(node == null) {
                return;
            }
    
            var t = node.left;
            node.left = node.right;
            node.right = t;
    
            reverse(node.left);
            reverse(node.right);
    
        }
    
        @Test
        public void test(){
            var tree = new BSTree<Integer>();
    
            tree.add(10);
            tree.add(7);
            tree.add(5);
            tree.add(8);
            tree.add(15);
            tree.add(30);
            tree.add(21);
    
            var printer = new TreePrinter();
            printer.print(tree.root);
    
    
            bfs(tree.root);
            //preOrder(tree.root);
            //postOrder(tree.root);
    //        inOrder(tree.root);
        }
    
        @Test
        public void test_reverse(){
            var tree = new BSTree<Integer>();
    
            tree.add(10);
            tree.add(7);
            tree.add(5);
            tree.add(8);
            tree.add(15);
            tree.add(30);
            tree.add(21);
    
            var printer = new TreePrinter();
            printer.print(tree.root);
    
            tree.reverse(tree.root);
            printer.print(tree.root);
        }
    
    }
    
    Last Updated: 2023/01/30, 11:01:00
    3-6 迷宫伪代码和8皇后问题源代码
    3-8 8皇后问题

    ← 3-6 迷宫伪代码和8皇后问题源代码 3-8 8皇后问题→

    Theme by Vdoing | Copyright © 2019-2023 pursue-wind | 粤ICP备2022093130号
    • 跟随系统
    • 浅色模式
    • 深色模式
    • 阅读模式
    • 飙升榜
    • 新歌榜
    • 云音乐民谣榜
    • 美国Billboard榜
    • UK排行榜周榜
    • 网络DJ