数据结构——二叉树

二叉树

在本教程中,您将学习二叉树及其不同类型。此外,您还将找到C,C ++,Java和Python中二叉树的工作示例。

 

二叉树是一种树数据结构,其中每个父节点最多可以有两个子节点。例如,

二叉树

二叉树


二叉树的类型

全二叉树

完整的二叉树是二叉树的一种特殊类型,其中每个父节点/内部节点都有两个或没有子节点。

全二叉树

全二叉树

要了解更多信息,请访问完整的二叉树

完美的二叉树

理想的二叉树是一种二叉树,其中每个内部节点恰好有两个子节点,而所有叶节点都处于同一级别。

完美的二叉树

完美的二叉树

要了解更多信息,请访问完善的二叉树

完整的二叉树

完整的二叉树就像完整的二叉树,但有两个主要区别

  1. 每个级别都必须完全填满
  2. 所有叶子元素都必须向左倾斜。
  3. 最后一个叶子元素可能没有正确的同级,即完整的二叉树不必是完整的二叉树。
完整的二叉树

完整的二叉树

要了解更多信息,请访问完整的二叉树

退化树或病理树

 

 

退化或病态的树是左侧或右侧有一个孩子的树。

简并二叉树

简并二叉树

偏二叉树

偏斜的二叉树是一种病态/退化的树,其中该树要么由左节点控制,要么由右节点控制。因此,有两种类型的斜二叉树:左斜二叉树右斜二叉树

偏二叉树

偏二叉树

平衡二叉树

它是一种二叉树,其中每个节点的左子树和右子树之间的差为0或1。

平衡二叉树

平衡二叉树

要了解更多信息,请访问平衡二叉树


二叉树表示

二叉树的节点由包含数据部分和指向相同类型其他结构的两个指针的结构表示。

struct node
{
 int data;
 struct node *left;
 struct node *right;
};
二叉树

二叉树表示


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);
  }
}

二叉树应用

  • 轻松快速地访问数据
  • 在路由器算法中
  • 实现堆数据结构
  • 语法树
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值