Java和Python中表示二叉树

当然,下面是如何在Java和Python中表示二叉树,并给出一些常见操作的代码示例。

Java 表示二叉树及常见操作

1. 定义节点类
java 复制代码
class TreeNode {  
    int val;  
    TreeNode left;  
    TreeNode right;  
  
    TreeNode(int x) {  
        val = x;  
        left = null;  
        right = null;  
    }  
}
2. 常见操作

插入节点(以根节点和值为参数)

java 复制代码
public class BinaryTree {  
    private TreeNode root;  
  
    public BinaryTree() {  
        root = null;  
    }  
  
    // 插入节点  
    public void insert(int val) {  
        root = insertRec(root, val);  
    }  
  
    private TreeNode insertRec(TreeNode root, int val) {  
        if (root == null) {  
            root = new TreeNode(val);  
            return root;  
        }  
        if (val < root.val) {  
            root.left = insertRec(root.left, val);  
        } else if (val > root.val) {  
            root.right = insertRec(root.right, val);  
        }  
        return root;  
    }  
  
    // 查找节点  
    public boolean search(int val) {  
        return searchRec(root, val);  
    }  
  
    private boolean searchRec(TreeNode root, int val) {  
        if (root == null) {  
            return false;  
        }  
        if (root.val == val) {  
            return true;  
        }  
        return val < root.val ? searchRec(root.left, val) : searchRec(root.right, val);  
    }  
  
    // 中序遍历  
    public void inorder() {  
        inorderRec(root);  
    }  
  
    private void inorderRec(TreeNode root) {  
        if (root != null) {  
            inorderRec(root.left);  
            System.out.print(root.val + " ");  
            inorderRec(root.right);  
        }  
    }  
  
    public static void main(String[] args) {  
        BinaryTree tree = new BinaryTree();  
        tree.insert(50);  
        tree.insert(30);  
        tree.insert(20);  
        tree.insert(40);  
        tree.insert(70);  
        tree.insert(60);  
        tree.insert(80);  
  
        System.out.println("中序遍历结果:");  
        tree.inorder();  
  
        System.out.println("\n查找70: " + tree.search(70));  
        System.out.println("查找99: " + tree.search(99));  
    }  
}

Python 表示二叉树及常见操作

1. 定义节点类
python 复制代码
class TreeNode:  
    def __init__(self, x):  
        self.val = x  
        self.left = None  
        self.right = None
2. 常见操作

插入节点(以根节点和值为参数)

python 复制代码
class BinaryTree:  
    def __init__(self):  
        self.root = None  
  
    # 插入节点  
    def insert(self, val):  
        self.root = self._insert_rec(self.root, val)  
  
    def _insert_rec(self, root, val):  
        if root is None:  
            root = TreeNode(val)  
            return root  
        if val < root.val:  
            root.left = self._insert_rec(root.left, val)  
        elif val > root.val:  
            root.right = self._insert_rec(root.right, val)  
        return root  
  
    # 查找节点  
    def search(self, val):  
        return self._search_rec(self.root, val)  
  
    def _search_rec(self, root, val):  
        if root is None:  
            return False  
        if root.val == val:  
            return True  
        return self._search_rec(root.left, val) if val < root.val else self._search_rec(root.right, val)  
  
    # 中序遍历  
    def inorder(self):  
        self._inorder_rec(self.root)  
        print()  # 换行  
  
    def _inorder_rec(self, root):  
        if root is not None:  
            self._inorder_rec(root.left)  
            print(root.val, end=' ')  
            self._inorder_rec(root.right)  
  
# 测试代码  
if __name__ == "__main__":  
    tree = BinaryTree()  
    tree.insert(50)  
    tree.insert(30)  
    tree.insert(20)  
    tree.insert(40)  
    tree.insert(70)  
    tree.insert(60)  
    tree.insert(80)  
  
    print("中序遍历结果:")  
    tree.inorder()  
  
    print(f"查找70: {tree.search(70)}")  
    print(f"查找99: {tree.search(99)}")

总结

  • Java 使用类 TreeNode 来定义节点,并通过递归方法实现插入、查找和中序遍历。
  • Python 同样使用类 TreeNode 来定义节点,并通过递归方法实现插入、查找和中序遍历。

这些代码示例展示了如何在两种语言中构建二叉树并执行基本操作。希望这对你有所帮助!

相关推荐
sali-tec3 小时前
C# 基于halcon的视觉工作流-章66 四目匹配
开发语言·人工智能·数码相机·算法·计算机视觉·c#
小明说Java3 小时前
常见排序算法的实现
数据结构·算法·排序算法
45288655上山打老虎3 小时前
C++完美转发
java·jvm·c++
Seven973 小时前
查找算法
java
路边草随风4 小时前
milvus向量数据库使用尝试
人工智能·python·milvus
newobut4 小时前
vscode远程调试python程序,基于debugpy库
vscode·python·调试·debugpy
行云流水20194 小时前
编程竞赛算法选择:理解时间复杂度提升解题效率
算法
APIshop4 小时前
用 Python 把“API 接口”当数据源——从找口子到落库的全流程实战
开发语言·python
毕设源码-朱学姐4 小时前
【开题答辩全过程】以 公务员考试在线测试系统为例,包含答辩的问题和答案
java
serendipity_hky5 小时前
【SpringCloud | 第2篇】OpenFeign远程调用
java·后端·spring·spring cloud·openfeign