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 来定义节点,并通过递归方法实现插入、查找和中序遍历。

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

相关推荐
侧耳倾听11112 分钟前
jwt使用简介
java·jwt
顶点多余41 分钟前
那些在算法中适合巩固的知识点---1
java·前端·算法
AI人工智能+电脑小能手1 小时前
大白话说Java设计模式-46-责任链模式(业务实战篇)
java·设计模式·责任链模式·风控校验·servlet filter·spring interceptor·链式处理
jay神1 小时前
【计算机毕业设计】基于SpringBoot的程序教学辅助系统
java·前端·vue.js·spring boot·后端·毕业设计·课程设计
AI情绪识别开源1 小时前
检信 ALLEMOTION OS 加密打包可执行程序 — 全面测试报告版本: v1.3功能测试 / 性能测试 /
开发语言·数据结构·人工智能·功能测试
2601_962066492 小时前
【Sql Server】Update中的From语句,以及常见更新操作方式
android·java·数据库
lupai2 小时前
手机在网状态接口实测效果与质量评估
大数据·python·智能手机·api接口
罗西的思考2 小时前
【Agentic RL / 强化学习框架】Molt 设计解读
人工智能·算法·机器学习
yaoxin5211233 小时前
507. Java 反射 - 在 BeanFactory 中实现依赖注入
java·开发语言
OPEN-F3 小时前
C++模板教程:变参模板、折叠表达式与SFINAE
java·开发语言·c++