数据结构--树与二叉树

数据结构分类

集合

线性结构(一对一)

树形结构(一对多)

图结构(多对多)

数据结构三要素

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));
相关推荐
代码不停14 分钟前
Java数据结构——Stack
java·开发语言·数据结构
奋进的小暄30 分钟前
数据结构(java)二叉树的基本操作
java·数据结构·算法
robin_suli1 小时前
链表系列一>两两交换链表中的结点
数据结构·算法·链表
wuqingshun31415910 小时前
蓝桥杯 5. 交换瓶子
数据结构·c++·算法·职场和发展·蓝桥杯
我想进大厂11 小时前
图论---朴素Prim(稠密图)
数据结构·c++·算法·图论
我想进大厂11 小时前
图论---Bellman-Ford算法
数据结构·c++·算法·图论
lkbhua莱克瓦2412 小时前
用C语言实现——一个中缀表达式的计算器。支持用户输入和动画演示过程。
c语言·开发语言·数据结构·链表·学习方法·交友·计算器
转基因13 小时前
Codeforces Round 1020 (Div. 3)(题解ABCDEF)
数据结构·c++·算法
Forworder14 小时前
[数据结构]树和二叉树
java·数据结构·intellij-idea·idea
我想进大厂15 小时前
图论---Kruskal(稀疏图)
数据结构·c++·算法·图论