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

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

相关推荐
草履虫建模38 分钟前
力扣算法 1768. 交替合并字符串
java·开发语言·算法·leetcode·职场和发展·idea·基础
naruto_lnq3 小时前
分布式系统安全通信
开发语言·c++·算法
Jasmine_llq3 小时前
《P3157 [CQOI2011] 动态逆序对》
算法·cdq 分治·动态问题静态化+双向偏序统计·树状数组(高效统计元素大小关系·排序算法(预处理偏序和时间戳)·前缀和(合并单个贡献为总逆序对·动态问题静态化
qq_297574673 小时前
【实战教程】SpringBoot 实现多文件批量下载并打包为 ZIP 压缩包
java·spring boot·后端
老毛肚3 小时前
MyBatis插件原理及Spring集成
java·spring·mybatis
学嵌入式的小杨同学3 小时前
【Linux 封神之路】信号编程全解析:从信号基础到 MP3 播放器实战(含核心 API 与避坑指南)
java·linux·c语言·开发语言·vscode·vim·ux
lang201509283 小时前
JSR-340 :高性能Web开发新标准
java·前端·servlet
Re.不晚4 小时前
Java入门17——异常
java·开发语言
爱吃rabbit的mq4 小时前
第09章:随机森林:集成学习的威力
算法·随机森林·集成学习
缘空如是4 小时前
基础工具包之JSON 工厂类
java·json·json切换