/** * 生成二叉树 */ public void createBTree() { Tree lchild, rchild, lnode, rnode; if (num == 1) { lchild = new Tree((Ran.getNumber(30)).ToString(), null, null); rchild = new Tree((Ran.getNumber(40)).ToString(), null, null); root = new Tree((Ran.getOperator()).ToString(), lchild, rchild); } else { int num1 = 0; int n = getDeep() - 3; bool[] place = Ran.getChildPlace(num); root = new Tree((Ran.getOperator()).ToString(), null, null); opeList.Add(root); for (int i = 0; i < n; i++) { for (int j = 0; j < (int)Math.Pow(2, i); j++, num1++) { lchild = new Tree((Ran.getOperator()).ToString(), null, null); rchild = new Tree((Ran.getOperator()).ToString(), null, null); opeList[j + num1].setChild(lchild, rchild); opeList.Add(lchild); opeList.Add(rchild); } } for (int i = 0; i < place.Length; i++) { if (place[i]) { lnode = new Tree((Ran.getNumber(40)).ToString(), null, null); rnode = new Tree((Ran.getNumber(60)).ToString(), null, null); if (i % 2 == 0) { lchild = new Tree((Ran.getOperator()).ToString(), lnode, rnode); opeList.Add(lchild); opeList[num1].setLchild(lchild); } else { rchild = new Tree((Ran.getOperator()).ToString(), lnode, rnode); opeList.Add(rchild); opeList[num1].setRchild(rchild); } } else { if (i % 2 == 0) { lchild = new Tree((Ran.getNumber(15)).ToString(), null, null); opeList[num1].setLchild(lchild); } else { rchild = new Tree((Ran.getNumber(100)).ToString(), null, null); opeList[num1].setRchild(rchild); } } num1 = num1 + i % 2; } } }