日日操夜夜添-日日操影院-日日草夜夜操-日日干干-精品一区二区三区波多野结衣-精品一区二区三区高清免费不卡

公告:魔扣目錄網(wǎng)為廣大站長(zhǎng)提供免費(fèi)收錄網(wǎng)站服務(wù),提交前請(qǐng)做好本站友鏈:【 網(wǎng)站目錄:http://www.ylptlb.cn 】, 免友鏈快審服務(wù)(50元/站),

點(diǎn)擊這里在線咨詢客服
新站提交
  • 網(wǎng)站:51998
  • 待審:31
  • 小程序:12
  • 文章:1030137
  • 會(huì)員:747

對(duì)于二叉樹,它的特點(diǎn)就是任何一個(gè)節(jié)點(diǎn),左節(jié)點(diǎn)小于父節(jié)點(diǎn)、右節(jié)點(diǎn)大于父節(jié)點(diǎn)遍歷二叉樹有多種方式,如中序遍歷、層序遍歷、后序遍歷,中序遍歷的思路就是左-->父--->右的順序,下面給出遞歸和非遞歸的兩種方法,遞歸很好理解,非遞歸就是一直找到最左節(jié)點(diǎn),然后回溯節(jié)點(diǎn),如果存在右節(jié)點(diǎn),則重復(fù)上述過程

如將下面的二叉樹使用中序遍歷輸出有序數(shù)組

java分別使用遞歸和非遞歸實(shí)現(xiàn)二叉樹中序遍歷

 

 

代碼如下

import JAVA.util.ArrayList;
import java.util.List;
import java.util.Stack;
/**
 * 中序遍歷的非遞歸和遞歸的實(shí)現(xiàn)
 * 
 * @author ssj
 *
 */
public class MiddleList {
	public static void main(String[] args) {
		// 創(chuàng)建一顆二叉樹
		Node root = new Node("10");
		Node n6 = new Node("6");
		Node n14 = new Node("14");
		n6.setParent(root);
		n14.setParent(root);
		root.setLeft(n6);
		root.setRight(n14);
		Node n4 = new Node("4");
		Node n8 = new Node("8");
		n6.setLeft(n4);
		n6.setRight(n8);
		Node n12 = new Node("12");
		Node n16 = new Node("16");
		n14.setLeft(n12);
		n14.setRight(n16);
		System.out.println("---------遞歸遍歷結(jié)果--------------------");
		List list = new ArrayList();
		middleListDG(root, list);
		System.out.println(list);
		System.out.println("---------非遞歸遍歷結(jié)果--------------------");
		List list2 = middleList(root);
		System.out.println(list2);
	}
	/**
	 * 遞歸中序遍歷
	 * 
	 * @param root
	 * @return
	 */
	public static void middleListDG(Node root, List list) {
		if (root == null) {
			return;
		}
		middleListDG(root.left, list);
		list.add(root.name);
		middleListDG(root.right, list);
	}
	/**
	 * 非遞歸中序遍歷
	 * @param root
	 * @return
	 */
	public static List middleList(Node root) {
		Stack<Node> sk = new Stack<Node>();
		List list = new ArrayList();
		Node n = root;
		while (n != null) {
			// 一直找到最左邊的節(jié)點(diǎn)
			while (n != null) {
				sk.push(n);
				n = n.left;
			}
			// 輸出最左邊的節(jié)點(diǎn)
			while (!sk.empty()) {
				Node n2 = sk.pop();
				list.add(n2.getName());
				// 如果該節(jié)點(diǎn)存在右節(jié)點(diǎn),先輸出所有的右節(jié)點(diǎn),即重復(fù)以上過程
				if (n2.right != null) {
					n = n2.right;
					break;
				}
			}
		}
		return list;
	}
}
/**
 * 樹節(jié)點(diǎn)
 * @author ssj
 *
 */
class Node {
	public String name;
	public Node left;
	public Node right;
	public Node parent = null;
	public String getName() {
		return name;
	}
	public void setName(String name) {
		this.name = name;
	}
	public Node getParent() {
		return parent;
	}
	public void setParent(Node parent) {
		this.parent = parent;
	}
	public Node(String name) {
		super();
		this.name = name;
	}
	public Node getLeft() {
		return left;
	}
	public void setLeft(Node left) {
		this.left = left;
	}
	public Node getRight() {
		return right;
	}
	public void setRight(Node right) {
		this.right = right;
	}
}

輸出結(jié)果

java分別使用遞歸和非遞歸實(shí)現(xiàn)二叉樹中序遍歷

 

分享到:
標(biāo)簽:遍歷
用戶無頭像

網(wǎng)友整理

注冊(cè)時(shí)間:

網(wǎng)站:5 個(gè)   小程序:0 個(gè)  文章:12 篇

  • 51998

    網(wǎng)站

  • 12

    小程序

  • 1030137

    文章

  • 747

    會(huì)員

趕快注冊(cè)賬號(hào),推廣您的網(wǎng)站吧!
最新入駐小程序

數(shù)獨(dú)大挑戰(zhàn)2018-06-03

數(shù)獨(dú)一種數(shù)學(xué)游戲,玩家需要根據(jù)9

答題星2018-06-03

您可以通過答題星輕松地創(chuàng)建試卷

全階人生考試2018-06-03

各種考試題,題庫(kù),初中,高中,大學(xué)四六

運(yùn)動(dòng)步數(shù)有氧達(dá)人2018-06-03

記錄運(yùn)動(dòng)步數(shù),積累氧氣值。還可偷

每日養(yǎng)生app2018-06-03

每日養(yǎng)生,天天健康

體育訓(xùn)練成績(jī)?cè)u(píng)定2018-06-03

通用課目體育訓(xùn)練成績(jī)?cè)u(píng)定