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

leetcode:二叉树遍历(morris)

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

leetcode:二叉树遍历(morris)

package com.lz.second;

import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;

import com.lz.first.ReverseList.ListNode;

public class BinaryTree2 {
	public static class TreeNode{
		int val;
		TreeNode left;
		TreeNode right;
		int deep;
		TreeNode(int val,TreeNode left,TreeNode right){
			this.val=val;
			this.left=left;
			this.right=right;
		}
	}
	
	private static List list=new ArrayList<>();
	public static void main(String[] args) {
		// TODO Auto-generated method stub
		TreeNode node7 = new TreeNode(7,null,null); 
		TreeNode node6 = new TreeNode(6,null,null); 
		TreeNode node5 = new TreeNode(5,node6,node7); 
		TreeNode node4 = new TreeNode(4,null,null); 
		TreeNode node3 = new TreeNode(3,null,null); 
		TreeNode node2 = new TreeNode(2,node4,node5); 
		TreeNode node1 = new TreeNode(1,node2,node3); 
		//morrisPre(node1);
		//morrisIn(node1);
		morrisPost(node1);
		
	}

	//前序
	public static void morrisPre(TreeNode cur) {
		if(cur==null) {
			return;
		}
		TreeNode mostRight=null;
		while(cur!=null) {
			mostRight=cur.left;
			if(mostRight!=null) {
				while(mostRight.right!=null&&mostRight.right!=cur) {
					mostRight=mostRight.right;
				}
				if(mostRight.right==null) {//建立线索指针
					mostRight.right=cur;
					System.out.println(cur.val);
					cur=cur.left;
					continue;
				}else {
					mostRight.right=null;
				}
			}else {
				System.out.println(cur.val);
			}
			cur=cur.right;
		}	
	}
	
	
	//中序
	public static void morrisIn(TreeNode cur) {
		if(cur==null) {
			return;
		}
		TreeNode mostRight=null;
		while(cur!=null) {
			mostRight=cur.left;
			if(mostRight!=null) {
				while(mostRight.right!=null&&mostRight.right!=cur) {
					mostRight=mostRight.right;
				}
				if(mostRight.right==null) {//建立线索指针
					mostRight.right=cur;
					cur=cur.left;
					continue;
				}else {
					mostRight.right=null;
				}
			}
			System.out.println(cur.val);
			cur=cur.right;
		}	
	}
	
	
	//后序
	public static void morrisPost(TreeNode cur) {
		if(cur==null) {
			return;
		}
		TreeNode root=cur;
		TreeNode mostRight=null;
		while(cur!=null) {
			mostRight=cur.left;
			if(mostRight!=null) {
				while(mostRight.right!=null&&mostRight.right!=cur) {
					mostRight=mostRight.right;
				}
				if(mostRight.right==null) {//建立线索指针
					mostRight.right=cur;
					cur=cur.left;
					continue;
				}else {
					mostRight.right=null;
					printNode(cur.left);
				}
			}
			cur=cur.right;
		}	
		printNode(root);
	}
	private static void printNode(TreeNode head) {
		TreeNode tail=reverse(head);
		while(tail!=null) {
			System.out.println(tail.val);
			tail=tail.right;
		}
		reverse(tail);
	}
	private static TreeNode reverse(TreeNode head) {//链表反转
		TreeNode prev=null,tmp;
		TreeNode curr=head;
		while(curr!= null) {
			tmp=curr.right;
			curr.right=prev;
			prev=curr;
			curr=tmp;
		}
		return prev;
	}	
	
}

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

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

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