数据结构--树与二叉树

数据结构分类

集合

线性结构(一对一)

树形结构(一对多)

图结构(多对多)

数据结构三要素

1、逻辑结构

2、数据的运算

3、存储结构(物理结构)

树的概念

树的分类

满二叉树和完全二叉树
二叉排序树
平衡二叉树
二叉树分类总结

二叉树的存储结构

顺序存储
链式存储

二叉树的遍历

先序遍历
javascript 复制代码
class Node {
            constructor(value) {
                this.value = value;
                this.left = null;
                this.right = null;
            }
        }
        const tree = new Node('A');

        tree.left = new Node('B');
        tree.right = new Node('C');
        tree.left.left = new Node('D');
        tree.left.right = new Node('E');
        tree.right.left = new Node('F');
        tree.right.right = new Node('G');
        // 前序遍历
        const preorderTraversal = (root) => {
            if (root === null) return;
            console.log(root.value); // 访问根节点
            preorderTraversal(root.left); // 遍历左子树
            
            preorderTraversal(root.right); // 遍历右子树
        };

        preorderTraversal(tree);
中序遍历
javascript 复制代码
class Node {
            constructor(value) {
                this.value = value;
                this.left = null;
                this.right = null;
            }
        }
        const tree = new Node('A');

        tree.left = new Node('B');
        tree.right = new Node('C');
        tree.left.left = new Node('D');
        tree.left.right = new Node('E');
        tree.right.left = new Node('F');
        tree.right.right = new Node('G');
        // 前序遍历
        const preorderTraversal = (root) => {
            if (root === null) return;
            preorderTraversal(root.left); // 遍历左子树
            console.log(root.value); // 访问根节点
            
            preorderTraversal(root.right); // 遍历右子树
        };

        preorderTraversal(tree);
后序遍历
javascript 复制代码
class Node {
            constructor(value) {
                this.value = value;
                this.left = null;
                this.right = null;
            }
        }
        const tree = new Node('A');

        tree.left = new Node('B');
        tree.right = new Node('C');
        tree.left.left = new Node('D');
        tree.left.right = new Node('E');
        tree.right.left = new Node('F');
        tree.right.right = new Node('G');
        // 前序遍历
        const preorderTraversal = (root) => {
            if (root === null) return;
            preorderTraversal(root.left); // 遍历左子树
            
            preorderTraversal(root.right); // 遍历右子树
            console.log(root.value); // 访问根节点
        };

        preorderTraversal(tree);

遍历构造二叉树

javascript 复制代码
        const generateTreeHelper = (node, n) => {
            node.left = new TreeNode(n);
            node.right = new TreeNode(n);
            n -= 1;

            if (n > 0) {
                generateTreeHelper(node.left, n);
                generateTreeHelper(node.right, n);
            }
        };

        const generateTree = (n) => {
            let root = null;

            if (n <= 0) return root;

            root = new TreeNode(3);
            generateTreeHelper(root, n - 1);

            return root;
        };

        console.log('--------root', generateTree(3));
相关推荐
AI情绪识别开源6 小时前
检信 ALLEMOTION OS 加密打包可执行程序 — 全面测试报告版本: v1.3功能测试 / 性能测试 /
开发语言·数据结构·人工智能·功能测试
伟大的车尔尼12 小时前
贪心的概念
数据结构·算法·贪心
AI情绪识别开源12 小时前
检信AI高一分班分科智选评估系统 v2.0测试报告
开发语言·数据结构·人工智能·科技
CoderYanger13 小时前
A.每日一题:输入单词需要的最少按键次数 Ⅰ+Ⅱ
java·数据结构·算法·leetcode·面试
雪碧聊技术14 小时前
KMP算法详解
数据结构
positive_zpc17 小时前
进阶数据结构图——关键路径(四)
数据结构·图论·关键路径
孙克旭_17 小时前
单链表进阶实操:5 道常考面试题详细解析【Java 实现】
java·开发语言·数据结构·单链表
Chester_199918 小时前
CSP202206C.角色授权
开发语言·数据结构·c++·蓝桥杯
旖旎夜光19 小时前
LeetCode 238:除自身以外数组的乘积(前缀和) —— 题解
数据结构·c++·算法·leetcode·前缀和
一条大祥脚19 小时前
26杭电暑期第八场(后半)快读|快写|tarjan|路径DP|mex转化|扫描线|前缀和|二分图
数据结构·算法·tarjan·杭电多校·强联通分量·动态规划dp