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

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

相关推荐
火车叼位3 分钟前
也许你不需要创建.venv, 此规范使python脚本自备依赖
python
YuTaoShao4 分钟前
【LeetCode 每日一题】1653. 使字符串平衡的最少删除次数——(解法一)前后缀分解
算法·leetcode·职场和发展
消失的旧时光-19438 分钟前
第十四课:Redis 在后端到底扮演什么角色?——缓存模型全景图
java·redis·缓存
BD_Marathon8 分钟前
设计模式——依赖倒转原则
java·开发语言·设计模式
火车叼位9 分钟前
脚本伪装:让 Python 与 Node.js 像原生 Shell 命令一样运行
运维·javascript·python
VT.馒头10 分钟前
【力扣】2727. 判断对象是否为空
javascript·数据结构·算法·leetcode·职场和发展
BD_Marathon12 分钟前
设计模式——里氏替换原则
java·设计模式·里氏替换原则
Coder_Boy_15 分钟前
Deeplearning4j+ Spring Boot 电商用户复购预测案例中相关概念
java·人工智能·spring boot·后端·spring
css趣多多17 分钟前
add组件增删改的表单处理
java·服务器·前端
雨中飘荡的记忆19 分钟前
Spring Batch实战
java·spring