数据结构--树与二叉树

数据结构分类

集合

线性结构(一对一)

树形结构(一对多)

图结构(多对多)

数据结构三要素

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));
相关推荐
小汉堡编程28 分钟前
数据结构——vector数组c++(超详细)
数据结构·c++
雾里看山4 小时前
顺序表VS单链表VS带头双向循环链表
数据结构·链表
好好研究7 小时前
学习栈和队列的插入和删除操作
数据结构·学习
挺菜的9 小时前
【算法刷题记录(简单题)003】统计大写字母个数(java代码实现)
java·数据结构·算法
2401_8582861110 小时前
125.【C语言】数据结构之归并排序递归解法
c语言·开发语言·数据结构·算法·排序算法·归并排序
双叶83611 小时前
(C++)学生管理系统(正式版)(map数组的应用)(string应用)(引用)(文件储存的应用)(C++教学)(C++项目)
c语言·开发语言·数据结构·c++
学不动CV了13 小时前
数据结构---链表结构体、指针深入理解(三)
c语言·arm开发·数据结构·stm32·单片机·链表
算法_小学生16 小时前
LeetCode 287. 寻找重复数(不修改数组 + O(1) 空间)
数据结构·算法·leetcode
Wo3Shi4七18 小时前
哈希冲突
数据结构·算法·go
V我五十买鸡腿19 小时前
顺序栈和链式栈
c语言·数据结构·笔记·算法