栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

交换树的左右子树

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

交换树的左右子树

题目如下:

随机构建一棵树,交换每个节点的左右子树。

思路:

(使用java语言)递归实现——>
(1)首先让头节点的左右子树进行交换,递归头结点的左子节点(假设为headLeft1)
(2)让headLeft1的左右子树交换,再递归headLeft1的左子节点,直到递归到叶子节点;
(3)按照以上思路再递归节点右子节点的左右子树进行交换,直到每个节点的左右节点都递归交换位置;
(4)遍历输出交换后的树。

思路图示:


代码如下:
public class SwapTree {
	public static void main(String[] args) {
		Node root=buildTree();
		System.out.println("交换之前==============");
		inOrderVisit(root);//交换之前的先序遍历
		ExchangeLeftRight( root);
		System.out.println();
		System.out.println("交换之后==============");
		inOrderVisit(root);//交换之后的先序遍历
	}
	//定义节点类
	class Node {
		int data = 0;
		Node left = null;
		Node right = null;
	}
	//创建树
	public static Node buildTree(){
		SwapTree s=new SwapTree();
		Node root = s.new Node();
		root.data = 1;
		
		Node temp = s.new Node();
		temp.data = 2;
		root.left = temp;
		
		temp = s.new Node();
		temp.data = 3;
		root.right = temp;
		
		temp = s.new Node();
		temp.data = 4;
		root.right.right = temp;
		
		temp = s.new Node();
		temp.data = 5;
		root.left.right = temp;
		
		temp = s.new Node();
		temp.data = 6;
		root.left.right.right = temp;
		
		temp = s.new Node();
		temp.data = 7;
		root.left.right.left=temp;
		
		return root;
		}
	//先序遍历树(根左右)
	public static void inOrderVisit(Node root) {
		if (root == null)
		return;
		
		System.out.print(root.data);
		inOrderVisit(root.left);
		inOrderVisit(root.right);
	}
	//交换左右子树
	public static void ExchangeLeftRight(Node node) {
		if(node == null)//节点为空 则return
			return ;
		if(node.left==null  && node.right==null){//当前节点是叶子节点时,return
			return;
		}
		else{//交换左右孩子
			Node temp = node.left;
			node.left = node.right;
			node.right = temp;
		}

		ExchangeLeftRight(node.left);//对左子节点进行递归,交换其左右子树
		ExchangeLeftRight(node.right);//对右子节点进行递归,交换其左右子树
	}

}

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/1024682.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号