二叉树
在本教程中,您将学习二叉树及其不同类型。此外,您还将找到C,C ++,Java和Python中二叉树的工作示例。
二叉树是一种树数据结构,其中每个父节点最多可以有两个子节点。例如,
![二叉树](https://img-blog.csdnimg.cn/img_convert/8c71e1db75a25dba4f45c40dc3a51d46.png)
二叉树
二叉树的类型
全二叉树
完整的二叉树是二叉树的一种特殊类型,其中每个父节点/内部节点都有两个或没有子节点。
![全二叉树](https://img-blog.csdnimg.cn/img_convert/49f25c60eff30f77913dd5fa576496c1.png)
全二叉树
要了解更多信息,请访问完整的二叉树。
完美的二叉树
理想的二叉树是一种二叉树,其中每个内部节点恰好有两个子节点,而所有叶节点都处于同一级别。
![完美的二叉树](https://img-blog.csdnimg.cn/img_convert/2166820fd9f04e3185cca16b87512e32.png)
完美的二叉树
要了解更多信息,请访问完善的二叉树。
完整的二叉树
完整的二叉树就像完整的二叉树,但有两个主要区别
- 每个级别都必须完全填满
- 所有叶子元素都必须向左倾斜。
- 最后一个叶子元素可能没有正确的同级,即完整的二叉树不必是完整的二叉树。
![完整的二叉树](https://img-blog.csdnimg.cn/img_convert/0b89bc3fa19185c45b18fd3f571da193.png)
完整的二叉树
要了解更多信息,请访问完整的二叉树。
退化树或病理树
退化或病态的树是左侧或右侧有一个孩子的树。
![简并二叉树](https://img-blog.csdnimg.cn/img_convert/975e7cb7fcee6752306acfa7462b33ae.png)
简并二叉树
偏二叉树
偏斜的二叉树是一种病态/退化的树,其中该树要么由左节点控制,要么由右节点控制。因此,有两种类型的斜二叉树:左斜二叉树和右斜二叉树。
![偏二叉树](https://img-blog.csdnimg.cn/img_convert/33a3e3ea69a23289bc2a7282f43792f3.png)
偏二叉树
平衡二叉树
它是一种二叉树,其中每个节点的左子树和右子树之间的差为0或1。
![平衡二叉树](https://img-blog.csdnimg.cn/img_convert/e50f46a46d34b28fc7a4f6337599934b.png)
平衡二叉树
要了解更多信息,请访问平衡二叉树。
二叉树表示
二叉树的节点由包含数据部分和指向相同类型其他结构的两个指针的结构表示。
struct node
{
int data;
struct node *left;
struct node *right;
};
![二叉树](https://img-blog.csdnimg.cn/img_convert/36c0692c7e1cf7963b9f23eba69bf7b1.png)
二叉树表示
Java示例
// Binary Tree in Java
// Node creation
class Node {
int key;
Node left, right;
public Node(int item) {
key = item;
left = right = null;
}
}
class BinaryTree {
Node root;
BinaryTree(int key) {
root = new Node(key);
}
BinaryTree() {
root = null;
}
// Traverse Inorder
public void traverseInOrder(Node node) {
if (node != null) {
traverseInOrder(node.left);
System.out.print(" " + node.key);
traverseInOrder(node.right);
}
}
// Traverse Postorder
public void traversePostOrder(Node node) {
if (node != null) {
traversePostOrder(node.left);
traversePostOrder(node.right);
System.out.print(" " + node.key);
}
}
// Traverse Preorder
public void traversePreOrder(Node node) {
if (node != null) {
System.out.print(" " + node.key);
traversePreOrder(node.left);
traversePreOrder(node.right);
}
}
public static void main(String[] args) {
BinaryTree tree = new BinaryTree();
tree.root = new Node(1);
tree.root.left = new Node(2);
tree.root.right = new Node(3);
tree.root.left.left = new Node(4);
System.out.print("Pre order Traversal: ");
tree.traversePreOrder(tree.root);
System.out.print("\nIn order Traversal: ");
tree.traverseInOrder(tree.root);
System.out.print("\nPost order Traversal: ");
tree.traversePostOrder(tree.root);
}
}
二叉树应用
- 轻松快速地访问数据
- 在路由器算法中
- 实现堆数据结构
- 语法树