Java 构建二叉树

输入一串序列,构建二叉树(该序列为二叉树层次遍历的结果)


Input: 8,8,7,9,2,#,#,#,#,4

Output:

节点:

class TreeNode {
	public TreeNode left;
	public TreeNode right;
	public char val;

	public TreeNode(char val) {
		this.val = val;
	}

	@Override
	public String toString() {
		// TODO Auto-generated method stub
		return "" + val;
	}
}

创建树:

public static TreeNode createTree(String str) {
		str = str.replaceAll(",", "");
		
		TreeNode node = null;
		TreeNode head = null;
		Queue<TreeNode> queen = new ArrayDeque<TreeNode>();

		boolean left = true;
		boolean right = false;

		for (int i = 0; i < str.length(); i++) {
 			char c = str.charAt(i);

			if (head == null) {
				head = new TreeNode(c);
				node = head;
				//queen.add(node);
			} else {
				TreeNode optional = (c == '#') ? null : new TreeNode(c);

				if (left) {
					left = false;
					right = true;
					TreeNode t = node;
 					t.left = optional;
				} else if (right) {
					left = true;
					right = false;
					TreeNode t = node;
					t.right = optional;
					node = queen.poll();
				}
				if(optional!=null){
					queen.add(optional);
				}
				
			}
		}
		return head;
	}

测试:
public static void main(String[] args) {
		TreeNode head = createTree("8,8,7,9,2,#,#,#,#,4".replaceAll(",", ""));
		print(head);
	}

	private static void print(TreeNode head) {
		if (head != null) {
			System.out.println(head.val);
			print(head.left);
			print(head.right);
		}
	}
结果:
8
8
9
2
4
7



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值