有關遞迴演算法的面試題java實現
阿新 • • 發佈:2019-01-02
什麼叫遞迴?
遞迴是方法(函式)呼叫方法本身的一種程式設計技巧;
使用遞迴需要滿足2個條件:
1)有反覆執行的過程(呼叫自身)
2)有跳出反覆執行過程的條件(遞迴出口)
遞迴演算法的應用
1.求n!,即階乘;這大概是我第一次接觸遞迴,很簡單,卻又很能揭示遞迴的原理;
2.二叉樹的遍歷、反轉;
3.連結串列的反轉;
下面來用程式碼實現;
二叉樹的反轉:
連結串列的反轉:public static Node invertTree(Node root) { Node tmpNode=new Node(0); if(root==null){ return null; }else{ tmpNode=root.leftChild; root.leftChild=root.rightChild; root.rightChild=tmpNode; invertTree(root.leftChild); invertTree(root.rightChild); } return root; }
public static Node Reverse1(Node head) { // head看作是前一結點,head.getNext()是當前結點,reHead是反轉後新連結串列的頭結點 if (head == null || head.getNextNode() == null) { return head;// 若為空鏈或者當前結點在尾結點,則直接還回 } Node reHead = Reverse1(head.getNextNode());// 先反轉後續節點head.getNext() head.getNextNode().setNextNode(head);// 將當前結點的指標域指向前一結點 head.setNextNode(null);// 前一結點的指標域令為null; count++; return reHead;// 反轉後新連結串列的頭結點 }