反转二叉树(Invert Binary Tree)

首先心疼 Max Howell 一秒钟。

首先,递归。

  • return NULL , if root is NULL
  • swap left and right
  • recur left child and right child
TreeNode* invertTree(TreeNode* root) 
    {
        if(root)
        {
            invertTree(root->left);
            invertTree(root->right);
            swap(root->left, root->right);
        }
        return root;
    }

然后,用栈非递归。(用队列也是差不多的)

  • stack save each node and swap their child if they have.
TreeNode* invertTree(TreeNode* root) 
    {
        stack<TreeNode*> sta;
        if(root)
            sta.push(root);

        while(!sta.empty())
        {
            TreeNode* t = sta.top();
            sta.pop();
            if(t->left)
                sta.push(t->left);
            if(t->right)
                sta.push(t->right);
            swap(t->left, t->right);
        }
        return root;
    }

for ending ,i realize how swap function strong is.

为了创建一个简单的二叉树结构,我们可以定义两个类:`TreeNode`(表示树中的单个节点)和 `BinaryTree`(代表整个二叉树)。这里我将给出基本的Java实现,并使用`java.util.ArrayList`来存储节点。 首先,我们定义`TreeNode`类: ```java public class TreeNode { int data; // 节点的数据 TreeNode left; // 左子节点 TreeNode right; // 右子节点 public TreeNode(int data) { this.data = data; left = null; right = null; } } ``` 接下来,我们定义`BinaryTree`类,包含根节点和其他辅助方法: ```java import java.util.ArrayList; public class BinaryTree { private TreeNode root; public BinaryTree() { root = null; } public void insert(int data) { root = insertNode(root, data); } private TreeNode insertNode(TreeNode node, int data) { if (node == null) { return new TreeNode(data); } if (data < node.data) { node.left = insertNode(node.left, data); } else if (data > node.data) { node.right = insertNode(node.right, data); } return node; } // 添加其他可能的方法,如遍历、删除等 // 以及可视化方法(如果使用图形界面,例如Swing或JavaFX) } ``` 对于可视化二叉树,通常会使用图形库如JUNG(Java Universal Network/Graph Framework)或JavaFX的Scene Graph。这里提供一个简化的可视化示例,但实际应用时可能需要更复杂的图形渲染: ```java import javafx.scene.Scene; import javafx.scene.layout.Pane; import javafx.scene.shape.Rectangle; import javafx.stage.Stage; public void visualize(TreeNode node, Pane pane) { if (node != null) { Rectangle rect = new Rectangle(30, 30); rect.setFill(Color.BLUE); // 设置节点颜色 rect.setTranslateX(node.data * 50); // 假设每个节点宽度为30px,根据数据值偏移位置 rect.setTranslateY(node.level * 50); // 根据深度设置y坐标,假设每一层的高度为50px pane.getChildren().add(rect); visualize(node.left, pane); visualize(node.right, pane); } } // 使用场景和舞台进行显示 public static void main(String[] args) { BinaryTree bt = new BinaryTree(); // 先插入节点... Stage stage = new Stage(); Pane rootPane = new Pane(); Scene scene = new Scene(rootPane, 800, 600); visualize(bt.root, rootPane); stage.setScene(scene); stage.show(); } ``` 这个例子使用了JavaFX来绘制一个静态的二维视图,实际上,动态更新和交互可能需要更复杂的方法。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值
>