• java建立二叉树,递归/非递归先序遍历,递归/非递归中序遍历,层次遍历


    import java.util.LinkedList;
    import java.util.Scanner;
    import java.util.Stack;
    
    //structure of binary tree
    class BiTree {
    	BiTree lchild;
    	BiTree rchild;
    	String data;
    }
    
    public class BiTreeTest {
    	static Scanner scanner = new Scanner(System.in);
    
    	// test case: a b c # # d e # g # # f # # #
    	static BiTree createBiTree(BiTree root) {
    		String data = scanner.next();
    		if (data.equals("#")) {
    			return null;
    		} else {
    			root = new BiTree();
    			root.data = data;
    			root.lchild = createBiTree(root.lchild);
    			root.rchild = createBiTree(root.rchild);
    			return root;
    		}
    	}
    
    	// preOrder recursive traverse
    	static void preOrderRecur(BiTree root) {
    		if (root != null) {
    			System.out.print(root.data + " ");
    			preOrderRecur(root.lchild);
    			preOrderRecur(root.rchild);
    		}
    	}
    
    	// inOrder recursive traverse
    	static void inOrderRecur(BiTree root) {
    		if (root != null) {
    			inOrderRecur(root.lchild);
    			System.out.print(root.data + " ");
    			inOrderRecur(root.rchild);
    		}
    	}
    
    	// preOrder in non-recursive
    	static void preOrder(BiTree root) {
    		Stack<BiTree> stack = new Stack<BiTree>();
    		BiTree cur;
    		stack.push(root);
    		while (!stack.empty()) {
    			while ((cur = stack.peek()) != null) {
    				System.out.print(cur.data + " ");
    				stack.push(cur.lchild);
    			}
    			cur = stack.pop();
    			if (!stack.empty() && (cur = stack.pop()) != null) {
    				stack.push(cur.rchild);
    			}
    		}
    	}
    
    	// inOrder in non-recursive
    	static void inOrder(BiTree root) {
    		Stack<BiTree> stack = new Stack<BiTree>();
    		BiTree cur;
    		stack.push(root);
    		while (!stack.empty()) {
    			while ((cur = stack.peek()) != null) {
    				stack.push(cur.lchild);
    			}
    			stack.pop();
    			if (!stack.empty() && (cur = stack.pop()) != null) {
    				System.out.print(cur.data + " ");
    				stack.push(cur.rchild);
    			}
    		}
    	}
    
    	// level traverse,use LinkedList instead of queue data structure
    	static void levelTraverse(BiTree root) {
    		LinkedList<BiTree> list = new LinkedList<BiTree>();
    		BiTree cur;
    		list.add(root);
    		while (list.size() != 0) {
    			cur = list.removeFirst();
    			if (cur != null) {
    				System.out.print(cur.data + " ");
    			}
    			if (cur.lchild != null) {
    				list.add(cur.lchild);
    			}
    			if (cur.rchild != null) {
    				list.add(cur.rchild);
    			}
    		}
    	}
    
    	public static void main(String[] args) {
    		BiTree root = null;
    		root = createBiTree(root);
    		// preOrderRecur(root);
    		// inOrderRecur(root);
    		// inOrder(root);
    		levelTraverse(root);
    	}
    }


  • 相关阅读:
    c++ string 的注意事项
    vim 高级技巧
    常用工具
    网络安全测试工具
    RMQ ST算法
    高精度模板
    CodeForces
    CodeForces
    线段树初探
    树状数组初探
  • 原文地址:https://www.cnblogs.com/pangblog/p/3397948.html
Copyright © 2020-2023  润新知