二叉树遍历,交换节点

这段代码展示了如何遍历二叉树并交换每个节点的左右子节点。`swapLeftRightNode`方法递归地遍历树,交换每个节点的左右子节点,实现了二叉树结构的反转。`createTree`方法用于构造一个测试用的二叉树,`outputTreeValue`则打印树中所有节点的值,便于在交换前后对比变化。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

public class TreeTest {

    public static void main(String[] args){

        TreeTest test = new TreeTest();

        TreeNode root = test.createTree();

        test.outputTreeValue(root);

        System.out.println();

        test.swapLeftRightNode(root);

        test.outputTreeValue(root);

    }

    public void outputTreeValue(TreeNode root){

        if(root != null){
            System.out.print(root.getValue() + " ");
            if(root.getLeftNode() != null){
                outputTreeValue(root.getLeftNode());
            }
            if(root.getRightNode() != null){
                outputTreeValue(root.getRightNode());
            }
        }

    }

    public void swapLeftRightNode(TreeNode root){
        if(root != null){
            //交换左右节点
            TreeNode temp = root.getLeftNode();
            root.setLeftNode(root.getRightNode());
            root.setRightNode(temp);
            if(root.getLeftNode() != null){
                swapLeftRightNode(root.getLeftNode());
            }
            if(root.getRightNode() != null){
                swapLeftRightNode(root.getRightNode());
            }
        }

    }


    public TreeNode createTree(){
        TreeNode root = new TreeNode();

        root.setValue(0);

        TreeNode temp1 = new TreeNode();

        temp1.setValue(1);

        TreeNode temp2 = new TreeNode();

        temp2.setValue(2);
        //根节点挂载两个子节点
        root.setLeftNode(temp1);
        root.setRightNode(temp2);


        TreeNode temp3 = new TreeNode();

        temp3.setValue(3);

        TreeNode temp4 = new TreeNode();

        temp4.setValue(4);

        temp1.setLeftNode(temp3);
        temp1.setRightNode(temp4);

        TreeNode temp5 = new TreeNode();

        temp5.setValue(5);

        TreeNode temp6 = new TreeNode();

        temp6.setValue(6);
        temp2.setLeftNode(temp5);
        temp2.setRightNode(temp6);
        TreeNode temp7 = new TreeNode();

        temp7.setValue(7);

        temp3.setLeftNode(temp7);

        return root;

    }




    /**
     * 树的节点
     */
    class TreeNode{
        private Integer value;

        private TreeNode leftNode;

        private TreeNode rightNode;

        public Integer getValue() {
            return value;
        }

        public void setValue(Integer value) {
            this.value = value;
        }

        public TreeNode getLeftNode() {
            return leftNode;
        }

        public void setLeftNode(TreeNode leftNode) {
            this.leftNode = leftNode;
        }

        public TreeNode getRightNode() {
            return rightNode;
        }

        public void setRightNode(TreeNode rightNode) {
            this.rightNode = rightNode;
        }
    }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值