二叉树
栈、队列、链表是一对一的线性关系
栈、队列的优势是,根据索引快速找到其中的任意某个元素,劣势就是插入和删除某个元素,因为会移动后面所有相关的元素
链表的优点是插入和删除元素很方便,缺点是找某个特定位置的元素,因为需要遍历每个节点o(n)
树是一对多的非线性关系
结合了顺序存储和链式存储的优点,二叉树结合了栈、队列、链表的优点
可以快速对数据进行插入、删除、查找,(即增删查)
利用树的结构可以大批量的处理动态数据,大大提高数据的排序和检索效率
数据结构与算法是训练一个人的编程思想的
二叉树的条件
o
/ \
o o
/ \ / \
o oo o
1.有且仅有一个根节点,最多有两个子树
2.子节点:Tl = 左子树 Tr = 右子树,子树本身也是一个二叉树(notice:递归思想)
表示二叉树的一个节点
1.元素内容------链表数据域
2.两个二叉树的结构体指针,分别指向左子树和右子树
链表结构体指针指向下一个节点的指针域
链表节点与二叉树节点非常相似,二叉树节点只比链表节点多了一个结构体指针
去掉左子树指针域或右子树指针域,就变成了链表数据结构
3.每个左右子树都可以作为一个根节点继续往下分,使用递归的方式创建二叉树
遍历二叉树:1.先序遍历、2.中序遍历、3.后序遍历
1.先序遍历
先访问根节点,然后遍历左子树,再遍历右子树
数据结构训练的是编程思想,而不是背公式背套路模板
树:
o A
/ \
B o o C
/ \ /
D o EooF
\
O G